Array 和 TypedArray 中尋找元素

發布於 · 標籤為 ECMAScript

從頭開始尋找元素 #

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 的運作方式類似,但它會傳回找到時的索引,找不到時傳回 -1findfindIndex 的 TypedArray 版本運作方式完全相同,唯一的差別是它們在 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 支援 #