我有以下
var cart= [{ item: "A", price: 2 },
{ item: "B", price: 3 },
{ item: "A", price: 2 },
{ item: "C", price: 5 },
{ item: "C", price: 5 },
{ item: "A", price: 2 }];
现在我想输出像。
Item Price Qty Total
A 2 3 6
B 3 1 3
C 5 2 10
答案 0 :(得分:1)
对于给定的item
:
var sub = myCollection.where({item: item}),
length = sub.length,
total = _.reduce(sub, function(memo, num){ return memo + num; }, 0);
如果您想对所有商品执行此操作,但他们可以使用无限数量的值,我建议先对您的收藏品进行排序,然后循环查找找到的值。
答案 1 :(得分:1)
您可以使用_.reduce
构建所需的对象
var reduced = _.reduce(cart, function(merged, object, index){
merged[object.item] = merged[object.item] || {};
merged[object.item] = {
item: object.item,
price: object.price,
qty: (merged[object.item].qty || 0) + 1,
total: (merged[object.item].total || 0) + object.price
}
return merged;
}, {});
这将为您提供以下内容,它可用于构建表
{
"A": {
"item": "A",
"price": 2,
"qty": 3,
"total": 6
},
"B": {
"item": "B",
"price": 3,
"qty": 1,
"total": 3
},
"C": {
"item": "C",
"price": 5,
"qty": 2,
"total": 10
}
}
没有必要使用_.reduce
功能。您可以使用任何映射函数或each
循环来获得相同的结果。如果您需要一个数组作为最终结果,请修改此代码。
答案 2 :(得分:0)
我使用了以下
var groups = _.groupBy(cartCollection, function(model){
return model.get('item');
});
_.each(groups,function(group){
console.log('Item: ' + group[0].get("item") + ', Price: ' + group[0].get("price") + ', Qty: ' + group.length + ', Total: ' + (group[0].get("price") * group.length));
});
现在输出