Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/下划线:在数组中按属性查找对象,并将它们组合起来_Javascript_Arrays_Underscore.js - Fatal编程技术网

javascript/下划线:在数组中按属性查找对象,并将它们组合起来

javascript/下划线:在数组中按属性查找对象,并将它们组合起来,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,如果我有一个如下所示的对象数组: [{id:1,product:'widget',quantity:10}, {id:2,product:'foobar',quantity:5}, {id:3,product:'widget',quantity:5}] [{id:1,product:'widget',quantity:15}, {id:2,product:'foobar',quantity:5}] javascript中是否有一种优雅的方法来查找同名对象,并将数量组合到第一个对象中,然后删除

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

[{id:1,product:'widget',quantity:10}, {id:2,product:'foobar',quantity:5}, {id:3,product:'widget',quantity:5}]
[{id:1,product:'widget',quantity:15}, {id:2,product:'foobar',quantity:5}]
javascript中是否有一种优雅的方法来查找同名对象,并将数量组合到第一个对象中,然后删除其余的对象

生成的数组如下所示:

[{id:1,product:'widget',quantity:10}, {id:2,product:'foobar',quantity:5}, {id:3,product:'widget',quantity:5}]
[{id:1,product:'widget',quantity:15}, {id:2,product:'foobar',quantity:5}]
现在我正在创建一个新数组,在现有数组上迭代,找到所有具有特定名称的内容,进行求和,然后将其转储到新数组中。这一切似乎过于复杂。我用下划线来处理很多重物

谢谢

尝试使用哈希表(Javascript中的对象):

var数据=新数组(
{id:1,产品:'widget',数量:10},
{id:2,产品:'foobar',数量:5},
{id:3,产品:'widget',数量:5}
);
var temp=新对象();
var newdata=newarray();
//将数量填入哈希表

对于(var i=0;i您是否同意结果不是一个正式数组而是一个传统对象?因为实际上,数组只是一种特殊类型的对象。通过这种方式,您可以像访问关联数组一样访问它,并且您可以根据产品名称进行访问,这似乎是您关心的:

var results = {};
for(var i = 0; i < yourarr.length; ++i) {
  if(!results.hasOwnProperty(yourarr[i].product)) {
    results[yourarr[i].product] = {};
    results[yourarr[i].product].id = yourarr[i].id;
    results[yourarr[i].product].quantity = yourarr[i].quantity;
  }

  results[yourarr[i].product].quantity += yourarr[i].quantity;
}

//Can now access by doing say, console.log(results.widget);
//To loop through, you can do:
for(var key in results) {
  if(results.hadOwnProperty(key) { //Needed to ensure you don't access prototype elements
    console.log(results.key);
  }
}
var结果={};
对于(变量i=0;i
您可以将产品和结果组相加,以获得所需的结构。用于对数量求和:

    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();

为什么要使用完整的
数组
对象
构造函数?这基本上就是Kevin描述为已经存在的解决方案。他希望下划线.js更优雅。