javascript - 使用 Reduce 而不是链接过滤器和映射
问题描述
我有一个函数接受一组狗对象并返回一个包含所有所有者姓名的数组。
dogs = [
{name: 'Archie', breed: 'Lurcher', owner: 'Jack'},
{name: 'Charlie', breed: 'Pug', owner: 'John'},
{name: 'Buddy', breed: 'Pug', owner: 'Mike'}
]
我通过链接过滤器和映射得到结果,但这意味着我在同一个列表上循环了两次。我知道这可以使用 Reduce 来完成,但不确定我将如何做到这一点。很多关于 Reduce 的例子似乎都带有数字,当我试图解决我的问题时,这有点令人困惑。
任何帮助,将不胜感激。谢谢
function getOwners(dogs) {
return dogs.filter(dog => dog.breed === 'Pug').map(dog => dog.owner);
}
returns ['John', 'Mike']
解决方案
您正在寻找的功能是:
dogs.reduce((total, current) => current.breed === "Pug" ? [...total, current.owner] : total, []);
我们检查狗并测试current.breed === "Pug"
每个元素,如果是真的,我们将当前狗的所有者添加到total
数组中,否则我们保持整个数组不变。
推荐阅读
- mongodb - 如何找到所有文件的单价*数量
- java - 在每个方法中不关闭 javax.sql.DataSource 可以吗?
- c# - Selenium - 发送密钥以在影子根(打开)和挪威银行 ID 的多个 iframe 中输入密码
- bootstrap-4 - 引导程序 4
- python - Tensorflow:创建一个对角矩阵,输入在子/超对角线上
- rust - 如何实现可能的突变的通用穿插
- javascript - Turf JS 交叉口问题
- kotlin - “this”不是 ArrayAdapter Kotlin 可接受的上下文
- javascript - React 'isSelected' 不适用于检查它是否被选中
- html - 行无排水沟不删除间距