跳到主要内容

在`Array`和TypedArray中查找元素

· 阅读需 2 分钟
Shu-yu Guo ([@_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支持情况