2016-11-10 106 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))