`Array`와 TypedArray에서 요소 찾기
시작점에서 요소 찾기
Array에서 특정 조건을 만족하는 요소를 찾는 것은 일반적인 작업이며, Array.prototype와 다양한 TypedArray 프로토타입에서 find와 findIndex 메서드를 사용하여 수행됩니다. Array.prototype.find는 조건문을 받아 해당 조건문이 true를 반환하는 첫 번째 요소를 반환합니다. 조건문이 어떤 요소에 대해서도 true를 반환하지 않으면, 이 메서드는 undefined를 반환합니다.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.find((element) => element.v % 2 === 0);
// → {v:2}
inputArray.find((element) => element.v % 7 === 0);
// → undefined
Array.prototype.findIndex는 비슷한 방식으로 작동하지만, 요소를 찾으면 해당 인덱스를 반환하며, 찾지 못하면 -1을 반환합니다. TypedArray의 find와 findIndex 버전은 완전히 동일하게 작동하며, 단지 Array 인스턴스 대신 TypedArray 인스턴스를 대상으로 작동한다는 점만 다릅니다.
inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1
마지막부터 요소 찾기
Array에서 마지막 요소를 찾고 싶다면 어떻게 해야 할까요? 여러 매칭 중 마지막 요소를 선택하거나, 특정 요소가 배열의 끝부분에 있을 가능성이 높은 상황에서 이러한 사용 사례가 자연스럽게 발생합니다. find 메서드를 사용하여 한 가지 해결 방법은 입력을 먼저 뒤집는 것입니다.
inputArray.reverse().find(predicate)
그러나 이는 원래의 inputArray를 제자리(in-place)에서 뒤집기 때문에 바람직하지 않을 때가 있습니다.
findLast와 findLastIndex 메서드를 사용하면 이러한 사용 사례를 직접적으로 편리하게 해결할 수 있습니다. 이들은 각각의 find와 findIndex와 정확히 동일하게 작동하지만, Array 또는 TypedArray의 끝에서부터 검색을 시작합니다.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.findLast((element) => element.v % 2 === 0);
// → {v:4}
inputArray.findLast((element) => element.v % 7 === 0);
// → undefined
inputArray.findLastIndex((element) => element.v % 2 === 0);
// → 3
inputArray.findLastIndex((element) => element.v % 7 === 0);
// → -1