是否有Javascipt或Lodash方法来组合这个对象集合:
[
{
typeId: 'random1'
catId: 'random2'
val: '2'
},
{
typeId: 'random1'
catId: 'random2'
val: '3'
},
{
typeId: 'random1'
catId: 'random4'
val: '1'
}
]
进入这一个,每个对象都有唯一的typeId-catId对,并且数值要总结:
[
{
typeId: 'random1'
catId: 'random2'
val: '5'
},
{
typeId: 'random1'
catId: 'random4'
val: '1'
}
]
答案 0 :(得分:1)
首先创建一个跟踪相似对象总val的对象,然后将它们处理成最终输出格式。像这样:
var data = [
{
typeId: 'random1',
catId: 'random2',
val: '2'
},
{
typeId: 'random1',
catId: 'random2',
val: '3'
},
{
typeId: 'random1',
catId: 'random4',
val: '1'
}
];
var groups = data.reduce(function(acc, obj) {
acc[obj.typeId+'_'+obj.catId] = acc[obj.typeId+'_'+obj.catId] || 0;
acc[obj.typeId+'_'+obj.catId] += +obj.val;
return acc;
}, {});
var result = Object.keys(groups).map(function(key) {
return {
typeId: key.split('_')[0],
catId: key.split('_')[1],
val : groups[key]
}
});
console.log(result);
答案 1 :(得分:1)
您可以使用#!/bin/bash
if [[ `which $1 &> /dev/null` ]]; then
echo "Execute the script"
else
echo "Error! Usage: "`basename $0`" <command_name>"
fi
循环和forEach()
参数按thisArg
和typeId
属性对对象进行分组。
catId
&#13;
答案 2 :(得分:1)
您可以使用query-js(*)。尽管如此,该模块还没有维护一段时间。你会做这样的事情:
arr.groupBy(function(e){return e.typeId + e.catId;}).each(function(grp){
let first = grp.first();
return {
typeId : first.typeId,
catId : first.catId,
val : grp.sum(function(e){return 0 + e.val;})
};
});
首先对对象进行分组,然后对每个组进行计算
(*)请注意,我完全有偏见,你不能把我的话作为推荐而只是建议,因为我是query-js的创建者
答案 3 :(得分:0)
这个怎么样?
for (var i=0; i<array.length; i++) {
for (var j=i+1; j<array.length; j++) {
if (array[i].typeId == array[j].typeId && array[i].catId == array[j].catId) {
array[i].val = parseInt(array[i].val) + parseInt(array[j].val);
array.splice(j--, 1);
}
}
}