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更优雅。