javascript/下划线 : find objects by property in an array, 并将它们组合起来

标签 javascript arrays underscore.js

如果我有一个如下所示的对象数组:

[{id:1,product:'widget',quantity:10}, {id:2,product:'foobar',quantity:5}, {id:3,product:'widget',quantity:5}]

JavaScript 中是否有一种优雅的方法来查找具有相同名称的对象,并将数量组合到第一个对象中,并删除其余的对象?

生成的数组将如下所示:

[{id:1,product:'widget',quantity:15}, {id:2,product:'foobar',quantity:5}]

现在我正在创建一个新数组,迭代现有数组,查找具有特定名称的所有内容,进行求和,然后将其转储到新数组中。这一切似乎过于复杂。我使用下划线来处理大量繁重的工作。

谢谢!

最佳答案

你可以groupBy产品然后 map结果组获得所需的结构。 Reduce用于对数量求和:

    var groups = _.chain(data)
        .groupBy('product')
        .map( function(group){
            return {
                id: group[0].id,
                product: group[0].product,
                quantity: _.reduce(group, function(memo, value){ return memo + value.quantity; }, 0 )
            }
        })
        .value();

关于javascript/下划线 : find objects by property in an array, 并将它们组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691622/

相关文章:

javascript - sails js模板jst.js错误找不到变量_

javascript - 对数组进行异步操作时的副作用

javascript - jQuery 浮点 : How to add data to the existing point graph instead of redrawing

javascript - Owl Carousel : change slide on hover dots

c - 指针作为调用 scanf 的函数的参数

java - 用 Java 对 2010 年人口普查的数组进行排序

javascript - 以编程方式添加过渡样式而不删除现有样式

php - 使用php中的复选框从mysql中选择数据库中的数据

javascript - 基于带 lodash 下划线的键拆分 jsonarray

javascript - 在 Backbone 模型中将数组渲染为列表