跳至主要内容

在 `Array` 和 TypedArray 中查找元素

· 閱讀時間約 2 分鐘
郭書宇 ([@_shu](https://twitter.com/_shu))

從開頭查找元素

Array 中查找滿足某個條件的元素是一項常見任務,可以使用 Array.prototype 和各種 TypedArray 的 findfindIndex 方法完成。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 的 findfindIndex 方法與此完全相同,唯一的區別是它們操作的是 TypedArray 實例而不是 Array 實例。

inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1

從結尾查找元素

如果您想查找 Array 中的最後一個元素怎麼辦?這種使用場景經常自然地出現,例如希望在多個匹配項中選擇最後一個元素以去重,或者事先知道該元素可能靠近 Array 的末尾。對於 find 方法,一種解決方案是先反轉輸入,如下所示:

inputArray.reverse().find(predicate)

然而,這會在原地反轉原始的 inputArray,這有時可能是不可取的。

使用 findLastfindLastIndex 方法,可以更直接和方便地解決這種情況。它們的行為與對應的 findfindIndex 完全相同,不同之處在於它們是從 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

findLastfindLastIndex 支援