배열 고차함수
- 고차함수란 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수
✏️ sort( )
- 배열의 요소를 적절하게 정렬
- 원본배열 직접 변경하여 정렬된 배열 반환
- 숫자 정렬 시 Unicode 코드 포인트 순서에 따른다
`ex) 1, 10,2,25..
const fruits = ['Banana', 'Orange', 'Apple'];
fruits.sort();
console.log(fruits);
fruits.reverse();
console.log(fruits);
const points = [40, 100, 1, 5, 2, 25, 10];
points.sort();
console.log(points);
- 숫자 배열 오름차순 정렬
arr.sort((a,b)=>{a -b ;});
- 비교 함수의 반환값이 0보다 작은 경우, a를 우선하여 정렬
- 숫자 배열 내림차순 정렬
arr.sort((a,b)=>{b -a ;});
- 비교 함수의 반환값이 0보다 큰 경우, b를 우선하여 정렬
const numbers = [0, 5, 4, 2, 1, 10];
numbers.sort();
console.log(numbers);
numbers.sort((a, b) => a - b);
console.log(numbers);
🔒 forEach( )
- for문 대신 사용 가능 , 가독성이 좋으므로!
- 단 forEach는
break
문을 사용할 수 없다
- 즉, 배열의 모든 요소 순회 시 중간에 순회를 중단 할 수 없음
- 배열을 순회하며 배열의 각 요소에 대하여 인자로 주어진 콜백함수를 실행한다.
- 콜백함수의 매개변수를 통해 배열 요소의 값, 요소인덱스, forEach메서드를 호출한 배열, 즉 this를 전달 받음
- forEach 메서드는 원본 배열을 변경하지 않고
- 콜백함수는 원본 배열을 변경할 수 있음
const numbers = [1, 3, 5, 7, 9];
let total = 0;
numbers.forEach(function (item, index, self) {
console.log(`numbers[${index}] = ${item}`);
total += item;
});
console.log(total);
console.log(numbers);
🔒 map( )
- 배열을 순회하며 각 요소에 대하여 인자로 주어진 콜백함수의 반환값으로 새로운 배열 생성하여 반환
- forEach()는 요소 값을 참조하여 무언가를 하기 위한 함수이며,
- map()은 배열을 순회하며 요소값을 다른 값으로 맵핑하기 위한 함수
const nums = [1, 2, 3, 4, 5];
result = nums.map((item) => item * 2);
console.log(result);
result = nums.map((item) => {
if (item % 2 === 0) {
return item * 2;
} else {
return item;
}
});
console.log(result);
🔒 flatMap( )
result = nums.map((item) => [1, 2]);
console.log(result);
result = nums.flatMap((item) => [1, 2]);
console.log(result);
let result2 = ['dream', 'coding'].flatMap((text) => text.split(''));
console.log(result2);
🔒 filter( )
- if문을 대체 가능
- 배열을 순회하며 인자로 주어진 콜백함수의 실행결과가 true인 배열의 요소 값만 추출 후 새로운 배열 반환
- 특정 케이스만 필터링 조건으로 추출하여 만들고싶을 때
const item1 = { name: '🥛', price: 2 };
const item2 = { name: '🍪', price: 3 };
const item3 = { name: '🍙', price: 1 };
const products = [item1, item2, item3];
const result = products.filter((item) => item.name === '🍪');
console.log(result);
🔒 reduce( )
- 배열을 순회하며 이전 콜백함수 실행 반환값을 전달하여
- 콜백함수를 실행하고 그 결과를 반환

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce(function (previousValue, currentValue, currentIndex, self) {
console.log(previousValue + '+' + currentValue + '=' + (previousValue + currentValue));
return previousValue + currentValue;
});
console.log(sum);
🔒 some( )
- 배열 내 일부 요소가 콜백함수 테스트를 통과하는지 확인
- 그 결과를
boolean
으로 반환
let res = [2, 5, 8, 1, 4].some(function (item) {
return item > 10;
});
console.log(res);
res = [12, 5, 8, 1, 4].some(function (item) {
return item > 10;
});
console.log(res);
res = ['apple', 'banana', 'mango'].some(function (item) {
return item === 'banana';
});
console.log(res);
🔒 every( )
- 배열 내 모든 요소가 콜백함수 테스트를 통과하는지 확인
- 그 결과를
boolean
으로 반환
let res = [21, 15, 89, 1, 44].every(function (item) {
return item > 10;
});
console.log(res);
res = [21, 15, 89, 100, 44].every(function (item) {
return item > 10;
});
console.log(res);
🔒 find( )
- 배열을 순회하며 인자로 주어진 콜백함수를 실행하여 그 결과가 참인 첫번째 요소만 반환
- filter()는 true인 배열 요소의 값만을 추출한 새로운 배열이며,
- find()는 true인 첫 번째 요소만 반환하므로 결과값은 배열이 아닌 해당 요소 값
- 참인 요소 존재하지 않는다면 undefined 반환
const users = [
{ id: 1, name: 'Lee' },
{ id: 2, name: 'Kim' },
{ id: 2, name: 'Choi' },
{ id: 3, name: 'Park' }
];
let result = users.find(function (item) {
return item.id === 2;
});
console.log(result);
result = users.filter(function (item) {
return item.id === 2;
});
console.log(result);
🔒 findIndex( )
- 배열을 순회하며 콜백함수로 실행한 결과가 참인 첫 번째 요소의 인덱스 반환
- 존재하지 않는다면 -1 반환
const users = [
{ id: 1, name: 'Lee' },
{ id: 2, name: 'Kim' },
{ id: 2, name: 'Choi' },
{ id: 3, name: 'Park' }
];
function predicate(key, value) {
return function (item) {
return item[key] === value;
};
}
let index = users.findIndex(predicate('id', 2));
console.log(index);
index = users.findIndex(predicate('name', 'Park'));
console.log(index);
참고