JavaScript에 기본적으로 내장된 고차함수들
그 중 배열에 관련된 것들을 공부
filter모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메소드
특정 조건 = 함수의 형태
= 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문에 고차함수
arr.filter(callback(element[, index[, array]])[, thisArg])
Array.prototype.filter() - mdn
Array.prototype.filter = function(func) {
const arr = this;
const newArr = []
for(let i = 0; i < arr.length; i++) {
if (func(arr[i]) === true) {
newArr.push(this[i])
}
}
return newArr;
}
배열의 요소를 인자로 전달되는 콜백 함수에 하나씩 전달
콜백 함수는 전달받은 요소를 받아 함수를 실행
- 콜백 함수 조건에 따라 참 또는 거짓을 리턴
참으로 리턴되는 요소만 모아 새로운 배열을 만들고 리턴
- 참으로 리턴되는 요소가 없다면 빈 배열을 리턴
= (참으로 리턴되는 요소 !== true)
= Deep equality로 조건을 명확하게 밝히는 걸 권장
map배열의 각 요소가 함수에 의해 다른 요소로 지정(map) 되는 메소드
= 요소를 다르게 지정할 방법을 명시한 함수를 인자로 받기 때문에 고차함수
arr.map(callback(currentValue[, index[, array]])[, thisArg])
배열의 요소를 인자로 전달되는 콜백 함수에 하나씩 전달
콜백 함수는 전달받은 요소를 받아 함수를 실행
- 콜백 함수에 따라 나오는 값을 리턴
리턴된 요소를 모아 새로운 배열을 만들고 리턴
- 원본 배열은 바뀌지 않는다
reduce배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 압축하는 메소드 (reduction)
= 압축할 방법을 명시한 함수를 인자로 받기 때문에 고차함수
arr.reduce(callback[, initialValue])
Array.prototype.reduce() - mdn
[0, 1, 2, 3, 4].reduce(function(acc, cur) {
return acc + cur;
});
[0, 1, 2, 3, 4].reduce( (prev, curr) => prev + curr );

초기값 initialValue 을 지정할 수 있다
- 없다면 배열의 첫번째 값 arr[0]
초기값과 다음값을 같이 콜백 함수로 전달
콜백 함수는 전달받은 요소를 받아 함수를 실행
- 콜백 함수에 따라 나오는 값을 리턴
위에서 리턴된 값과 그 다음값을 다시 콜백 함수로 전달
- 콜백 함수에 따라 나오는 값을 다시 리턴
위 과정을 배열 끝까지 반복
마지막에 리턴된 값을 리턴
forEach주어진 함수를 배열 각 요소에 대해 실행
= 실행할 함수를 인자로 받기 때문에 고차함수
Array.prototype.forEach() - mdn
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
map() 과 비슷한 느낌?
map()과 reduce()와는 달리 undefined를 반환
for 반복문을 forEach()로 바꿔서 쓸 수 있다
const items = ['item1', 'item2', 'item3'];
const copy = [];
// 이전
for (let i=0; i<items.length; i++) {
copy.push(items[i]);
}
// 이후
items.forEach(function(item){
copy.push(item);
});
find주어진 함수를 만족하는 첫 번째 요소의 값을 반환
= 만족할 조건을 명시한 함수를 인자로 받기 때문에 고차함수
arr.find(callback[, thisArg])
undefined 반환findIndex() : 값 대신 인덱스를 반환sort배열의 요소를 적절한 위치에 정렬
= 정렬할 조건을 명시한 함수를 인자로 받기 때문에 고차함수
arr.sort([compareFunction])
정렬할 조건을 명시한 함수가 없다면
- 요소를 문자열로 변환
- 유니코드 순서로 비교하여 정렬
정렬할 조건을 명시한 함수가 있을 때
- 함수의 반환 값에 따라 위치를 정한다
a, b를 비교할 때
compareFunction(a, b): 0보다 작으면
= a를 b보다 앞으로 정렬compareFunction(a, b): 0이면
= 서로 바꾸지 않음compareFunction(a, b): 0보다 크면
= a를 b보다 뒤로 정렬- a와 b가 각각 동일하게 들어간다면 결과값도 항상 동일해야한다
예) 숫자를 정렬할 때
let numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]
some배열 어떤 요소 하나라도 주어진 함수를 통과하는지 테스트하는 메소드
= 판별할 조건을 명시한 함수를 인자로 받기 때문에 고차함수
arr.some(callback[, thisArg])
true을 반환false 반환falseevery배열 모든 요소가 주어진 판별 함수를 통과하는지 테스트하는 메소드
= 판별할 조건을 명시한 함수를 인자로 받기 때문에 고차함수
arr.every(callback[, thisArg])
true을 반환false 반환true