javascript - 使用 Reduce 而不是链接 Filter 和 Map

标签 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",如果为真,我们将当前狗的所有者添加到 总数 array,否则我们保持总数组不变。

关于javascript - 使用 Reduce 而不是链接 Filter 和 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57701306/

相关文章:

python - 减少元组列表

java - 为什么 Java 流图会减少我的结果两次?

javascript - 子方法未定义 vue.js

javascript - 控制 HTML5 视频中播放的开始位置和持续时间,然后下载该视频的特定持续时间

python - 减少功能如何工作?

map - Hadoop:键和值在输出文件中以制表符分隔。如何做到以分号分隔?

android - 减少许多 Activity 的庞大代码

javascript - 仅安装 js 文件作为依赖项

javascript - 文档在 mongoDB 中如何被映射但没有被减少?

javascript - ExtJS 通过 View 访问 Controller