为什么ES6有"查找"方法,因为它的功能可以通过"reduce"来实现?



在JavaScript中,我们遇到了一个阶段,我们想基于键从对象数组中获取对象(如果我们不在骨干集合的上下文中工作(。

JavaScript的较新版本的方法可以直接完成上述操作。

,但也可以通过ES5中的减少方法来完成。

引入.find()的最可能原因是它是一个相当普遍的功能。以下面的代码为例:

let arr = [{id: 1, descriptor: "firstElement"}, {id: 2}, {id: 3}, {id: 1, descriptor: "lastElement"}];
// find using reduce
let foundItem = arr.reduce((prevItem, item) => item.id === 1 ? item : prevItem, arr); 
// find using find
let foundItem2 = arr.find(item => item.id === 1);
console.log(foundItem); // prints: {id: 1, descriptor: "lastElement"}
console.log(foundItem2); // prints: {id: 1, descriptor: "firstElement"}

使用.find()的代码更简洁,更易于阅读。此外,.find()准确地表达了您想在此处执行的操作:"找到与表达式匹配的第一个项目",而.reduce()仅表示"将数组减少到一个项目,但是看起来可能看起来"。您必须阅读表达式以确定减少的作用。对于找到某些东西等常见功能,这是一个麻烦。

另一个区别:.find()在找到第一个元素后停止并返回第一个元素。reduce()方法不会停止,并且在我实现时,它将返回数组中的最后一个匹配元素。如果您想要第一个,减少看起来就是这样:

let arr = [{id: 1, descriptor: "firstElement"}, {id: 2}, {id: 3}, {id: 1, descriptor: "lastElement"}];
let foundItem = arr.reduce((prevItem, item) => prevItem.id === 1 ? prevItem : item.id === 1 ? item : prevItem, arr); 

现在,减少变得更加不可读。

相关内容

最新更新