오늘의 커리큘럼은 javascript 1주차 강의 듣고 간단한 팀 git과제를 하는 날이었다
봐도봐도 헷갈리는 개념만 다시 짚고 넘어가야겠다
git 너무 어렵다~!!!!!!
배열 고차 함수
Array.prototype.forEach
- forEach메서드는 for 문을 대체할 수 있는 고차 함수다.
- 자신의 내부에서 반복문을 실행한다.
- 원본 배열을 변경하지 않는다
- 하지만 콜백 함수를 통해 원본 배열을 변경할 수는 있다
- forEach 메서드의 반환값은 언제나 undefined
- 단순히 반복문을 대체하기 위한 고차 함수
const numbers = [1, 2, 3];
const pows = [];
numbers.forEach((i) => pows.push(i * 2));
console.log(pows); // [2, 4, 6]
[1, 2, 3].forEach((item, index, arr) => {
console.log(`요소값: ${item}, 인덱스: ${index}, this: ${JSON.stringify(arr)}`);
});
/*
요소값: 1, 인덱스: 0, this: [1,2,3]
요소값: 2, 인덱스: 1, this: [1,2,3]
요소값: 3, 인덱스: 2, this: [1,2,3]
*/
* JSON.stringify : 객체를 JSON 포맷의 문자열로 변환
const numbers = [1, 2, 3];
numbers.forEach((item, index, arr) => { arr[index] = item ** 2; });
console.log(numbers); // [1, 4, 9]
Array.prototype.map
- map 메서드는 자신을 호출한 배열의 모든 요소를 순회하면서 인수로 전달받은 콜백 함수를 반복 호출한다.
- 그리고 콜백 함수의 반환값들로 구성된 새로운 배열을 반환한다.
- 원본 배열은 변경되지 않는다.
- map 메서드는 콜백 함수의 반환값들로 구성된 새로운 배열을 반환
const numbers = [1, 4, 9];
const roots = numbers.map((item) => Math.sqrt(item));
console.log(roots); // [1, 2, 3]
console.log(numbers); // [1, 4, 9]
[1, 2, 3].map((item, index, arr) => {
console.log(
`요소값: ${item}, 인덱스: ${index}, this: ${JSON.stringify(arr)}`
);
});
/*
요소값: 1, 인덱스: 0, this: [1,2,3]
요소값: 2, 인덱스: 1, this: [1,2,3]
요소값: 3, 인덱스: 2, this: [1,2,3]
*/
Array.prototype.filter
- filter 메서드는 자신을 호출한 배열의 모든 요소를 순회하면서 인수로 전달받은 콜백 함수를 반복 호출한다.
- 콜백 함수의 반환값이 true인 요소로만 구성된 새로운 배열을 반환한다.
- 원본 배열은 변경되지 않는다.
const numbers = [1, 2, 3, 4, 5];
const odds = numbers.filter(item => item % 2);
console.log(odds); // [1, 3, 5]
* 요소값을 2로 나눈 나머지를 반환
* 반환값이 true, 즉 홀수인 요소만 추출
[1, 2, 3].filter((item, index, arr) => {
console.log(`요소값: ${item}, 인덱스: ${index}, this: ${JSON.stringify(arr)}`);
return item % 2;
});
/*
요소값: 1, 인덱스: 0, this: [1,2,3]
요소값: 2, 인덱스: 1, this: [1,2,3]
요소값: 3, 인덱스: 2, this: [1,2,3]
*/
Array.prototype.find
- find 메서드는 자신을 호출한 배열의 요소를 순회하면서 인수로 전달된 콜백 함수를 호출하여 반환값이 true인 첫 번째 요소를 반환한다.
- 콜백 함수의 반환값이 true인 요소가 존재하지 않는다면 undefined를 반환
const users = [
{ id: 1, name: "Lee" },
{ id: 2, name: "Kim" },
{ id: 3, name: "Ham" },
{ id: 4, name: "Park" },
];
users.find((user) => user.id === 2); // { id: 2, name: 'Kim' }
배열 메서드
push, pop, shift, unshift 메서드는 모두 원본 배열을 직접 변경한다.
Array.prototype.splice
- 원본 배열의 중간에 요소를 추가하거나 중간에 있는 요소를 제거하는 경우 splice 메서드를 사용한다.
- splice 메서드는 3개의 매개변수가 있으며 원본 배열을 직접 변경한다.
- start: 원본 배열의 요소를 제거하기 시작할 인덱스. start만 지정하면 원본 배열의 start부터 모든 요소를 제거한다. start가 음수인 경우 배열의 끝에서의 인덱스를 나타낸다. 만약 start가 -1이면 마지막 요소를 가리키고 -n이면 마지막에서 n번째 요소를 가리킨다.
- deleteCount: 원본 배열의 요소를 제거하기 시작할 인덱스인 start부터 제거할 요소의 개수. deleteCount가 0인 경우 아무런 요소도 제거되지 않는다.(옵션)
- items: 제거한 위치에 삽입할 요소들의 목록.생략할 경우 원본 배열에서 요소들을 제거하기만 한다.(옵션)
const arr = [1, 2, 3, 4];
const result = arr.splice(1, 2, 20, 30);
// 제거한 요소가 배열로 반환
console.log(result); // [2, 3]
// splice 메서드는 원본 배열을 직접 변경한다
console.log(arr); // [1, 20, 30, 4]
const arr = [1, 2, 3, 4];
const result = arr.splice(1, 0, 100);
console.log(result); // [1, 100, 2, 3, 4]
console.log(arr); // []
Array.prototype.slice
- slice 메서드는 인수로 전달된 범위의 요소들을 복사하여 배열로 반환한다.
- 원본 배열은 변경되지 않는다.
- 2개의 매개변수를 갖는다
- start: 복사를 시작할 인덱스. 음수인 경우 배열의 끝에서의 인덱스를 나타낸다. 예를 들어, slice(-2)는 배열의 마지막 두 개의 요소를 복사하여 배열로 반환
- end: 복사를 종료할 인덱스. 이 인덱스에 해당하는 요소는 복사되지 않는다. end는 생략 가능하며 생략 시 기본값은 length 프로퍼티 값이다.
const arr = [1, 2, 3];
arr.slice(0, 1); // [1]
arr.sllice(1, 2); // [2]
arr.slice(1); // [2, 3]
arr.slice(-1); // [3]
arr.slice(-2); // [2, 3]
console.log(arr); // [1, 2, 3]
참조 - 딥다이브 책
'항해 > TIL' 카테고리의 다른 글
TIL(2/13) / JS 메서드 (0) | 2024.02.13 |
---|---|
TIL(2/10) / DOM, 클래스, 클로저 (0) | 2024.02.10 |
TIL(2/8) / JS 4 (콜백함수, 동기/비동기) (0) | 2024.02.08 |
TIL(2/7) / JS 3 (실행 컨텍스트, this) (0) | 2024.02.07 |
TIL(2/6) / JS 2 (일급 객체, Map&Set) (0) | 2024.02.06 |