從頭開始尋找元素 #
在 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
。find
和 findIndex
的 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
,這有時是不理想的。
使用 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
findLast
和 findLastIndex
支援 #
- Chrome: 自版本 97 起支援
- Firefox: 不支援
- Safari: 部分支援
- Node.js: 不支援
- Babel: 支援