2016-11-10 101 views
1

我有对象的数组(为了)(产品):我想组和ID统计所有这些产品:GROUPBY阵列underscore.js

var order = [ 
{ product_id: 70, product_price: 9, product_color: "ccc"}, 
{ product_id: 70, product_price: 9, product_color: "ccc"}, 
{ product_id: 71, product_price: 10, product_color: "fff" } ]; 

用下划线.js文件:

var groups = _.countBy(order, function(value){ 
    return value.product_id + "#" + value.product_price + "#" + value.product_color; 
}) 
//--> Object {70#ccc#9: 2, 71#fff#10: 1} 

所以它的工作原理......但现在,我怎么能返回论文值到这样一个数组,这样我就可以用这方面的工作为对象的新数组?

[ 
    { product_id: 70, product_price: 9, product_color: "ccc", count: 2}, 
    { product_id: 70, product_price: 9, product_color: "fff", count: 1} 
]; 

回答

1

相反countBy的,你可以使用groupBy然后map跨组添加计数:

var groups = _.groupBy(order, function(value){ 
    return value.product_id + "#" + value.product_price + "#" + value.product_color; 
}) 

groups = _.map(groups, function(group){ 
    return _.extend(group[0], {count: group.length}); 
}); 
+0

嗯,这很容易:-)谢谢! – shlagwuk

0

可以使用减少到重建原始的阵列。

var countedById = [ 
 
    { product_id: 70, product_price: 9, product_color: "ccc", count: 2}, 
 
    { product_id: 70, product_price: 9, product_color: "fff", count: 1} 
 
]; 
 

 
var original = countedById.reduce((acc, cur) => { 
 
    for (var i = 0; i < cur.count; i++) { 
 
    var original = { 
 
     product_id: cur.product_id, 
 
     product_price: cur.product_price, 
 
     product_color: cur.product_color 
 
    } 
 
    acc.push(original); 
 
    } 
 
    return acc; 
 
    }, []); 
 

 
document.write(JSON.stringify(original))