我正在使用lodash将我的对象分组到我的数组中。
var grouped = _.groupBy(this.tableData, function(obj) {
return obj.key
});
它给了我一个带键值对的对象。
{mykey1: [{obj1}, {obj2}], mykey2: [obj1]}
我的问题是我如何遍历每个键内的对象并进行计算。例如,如果我的对象中有一个属性cost
,我想总结一下我的密钥中每个对象内的所有成本吗?
答案 0 :(得分:0)
您可以结合使用_.mapValues
和_.sumBy
:
var summed = _.mapValues(grouped, function(v){
return _.sumBy(v, 'cost');
});
下面的实例:
var tableData = [
{key:"obj1",cost:1},
{key:"obj1",cost:1},
{key:"obj1",cost:1},
{key:"obj2",cost:1},
{key:"obj2",cost:1}
]
var grouped = _.groupBy(tableData, function(obj) {
return obj.key
});
var summed = _.mapValues(grouped, function(v){
return _.sumBy(v, 'cost');
});
console.log(summed);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
答案 1 :(得分:0)
您可以使用原生javascript:
//let obj = {key1: [{cost: 1}, {cost: 2}], key2: [{cost: 3}]}; example input
Object.values(obj).reduce((sum, arr)=> sum + arr.reduce((subsum, element)=>subsum + element.cost, 0), 0);
说明:
Object.values(obj) //-> [[{cost: 1}, {cost: 2}], [{cost: 3}]]
[1, 2, 3].reduce((sum, element)=> sum + element), 0) //-> reduce (converting a list of things into one)