在`Array`和TypedArray中查找元素
· 阅读需 2 分钟
从开头查找元素
在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
工作原理完全相同,只是它们操作的是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