Array 和类型化数组中查找元素

发布日期 · 标签:ECMAScript

从开头查找元素 #

Array 中查找满足某些条件的元素是一项常见任务,可以使用 Array.prototype 和各种类型化数组原型上的 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 的类型化数组版本的工作原理完全相同,唯一的区别是它们操作的是类型化数组实例,而不是数组实例。

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 或类型化数组的末尾开始搜索。

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 支持 #