- Published on
2024.08.06
[딥다이브] - 27. 배열(2)
27.9. 배열 고차 함수
고차 함수: 함수를 인수로 전달받거나 함수를 리턴하는 함수
27.9.1. Array.prototype.sort
sort 메서드의 기본 정렬 순서는 유니코드 코드 포인트의 순서를 따른다. 따라서 숫자 요소를 정렬할 때는 sort 메서드에 정렬 순서를 정의하는 비교 함수를 인수로 전달해야 한다. 비교 함수는 양수나 음수, 0을 리턴해야 한다. 비교 함수의 리턴값이 0보다 작으면 첫 번째 인수를, 0보다 크면 두 번째 인수를 정렬하며, 0이면 정렬하지 않는다.
* sort 메서드의 정렬 알고리즘은 quicksort 알고리즘을 사용하다 ES10부터는 timsort 알고리즘을 사용한다.
27.9.2. Array.prototype.forEach
forEach 메서드는 for 문을 대체할 수 있는 고차 함수며, 반복을 위한 변수를 선언하는 for 문과 비교해 성능이 좋지는 않지만 가독성은 더 좋다. 요소가 많은 배열을 순회하거나 복잡한 코드 또는 높은 성능이 필요한 경우가 아니라면 for 문 대신 forEach 메서드를 권장한다.
for 문과 달리 break, continue 문을 사용할 수 없다.
27.9.5. Array.prototype.reduce
배열을 순회하며 인수로 전달받은 콜백 함수를 반복 호출하고, 리턴값을 다음 순회 시에 콜백 함수의 첫 번째 인수로 전달하며 하나의 결과값을 만들어 리턴한다. 원본 배열은 변경되지 않는다. reduce 메서드는 하나의 결과값을 리턴한다.
두 번째 인수로 전달하는 초기값은 첫 번째 순회에 콜백 함수의 첫 번째 인수로 전달되는데, 주의할 것은 두 번째 인수로 전달하는 초기값이 옵션이다. reduce 메서드를 호출할 때는 언제나 초기값을 전달하는 것이 안전하다.
빈 배열로 reduce 메서드를 호출하면 에러가 발생하는데, 이때 reduce에 초기값을 전달하면 에러가 발생하지 않는다.
객체의 특정 프로퍼티 값을 합산하는 경우에는 반드시 초기값을 전달해야 한다.
27.9.8. Array.prototype.find
인수로 전달된 콜백 함수를 호출하여 리턴값이 true
인 첫 번째 요소를 리턴한다. 요소가 존재하지 않는다면 undefined
를 리턴한다.
27.9.9. Array.prototype.findIndex
인수로 전달된 콜백 함수를 호출하여 리턴값이 true
인 첫 번째 요소의 인덱스를 리턴한다. 요소가 존재하지 않는다면 -1
을 리턴한다.
27.9.10. Array.prototype.flatMap
ES10에서 도입되었으며, map 메서드를 통해 생성된 새로운 배열을 평탄화한다. 즉, map 메서드와 flat 메서드를 순차적으로 실행하는 효과가 있다. 단, 평탄화의 깊이는 1단게만 평탄화한다.