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