对于图表实现,我有两个对象需要展平。
2019-09-12: {
type1: {
subType1: {
value: 5
},
subType2: {…}
},
type2: {
subType1: {
value: 8
},
subType2: {…}
}
}
这需要变成这个;
cumulated: {
subType1: {
value: 13
},
subType2: {sum}
}
答案 0 :(得分:1)
您可以使用lodash library。例如
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
答案 1 :(得分:1)
var obj = {"2019-09-12": {
type1: {
subType1: {
value: 5
},
subType2: {value: 7}
},
type2: {
subType1: {
value: 8
},
subType2: {value: 9}
}
}}
var sumType1 = 0;
var sumType2 = 0;
function cumul(){
Object.keys(obj).forEach(function(date){
Object.keys(obj[date]).forEach(function(typeValue){
sumType1 += obj[date][typeValue].subType1.value;
sumType2 += obj[date][typeValue].subType2.value;
})
})
return {
cumulated: {
subType1: {
value: sumType1
},
subType2: {sumType2}
}
}
}
console.log(cumul())
答案 2 :(得分:1)
您可以遍历对象的键并对它们求和。
const obj = {
type1: {
subType1: {
value: 5
},
subType2: {
value: 1
},
},
type2: {
subType1: {
value: 8
},
subType2: {
value: 2
}
}
};
const combine = (obj) => Object.keys(obj).reduce((res, cur) => {
for (let key of Object.keys(obj[cur])) {
if (res.hasOwnProperty(key)) {
res[key].value += obj[cur][key].value;
} else {
res[key] = obj[cur][key];
}
};
return res;
}, {});
console.log(combine(obj));
答案 3 :(得分:0)
谢谢大家! 这是我最后想出的:
我使用过lodash库,但是它确实快速又干净。同样,物体的形状也不重要,它的深度可以达到物体的深度
import mergeWith from 'lodash/mergeWith'
mergeWith({}, ...Object.values(objectThatNeedsToCollapse), (objValue, srcValue) =>
typeof objValue === "number" ? objValue + srcValue : undefined
)