问题描述
我一直坚持在 JavaScript 中合并一组对象。我想使用 JS 库或 lodash 将它们合并为一个对象。
我的数组就像
[{
2017: {
a: "100",b: "200"
},2018: {
a: "101",b: "202"
},...
},{
2017: {
a: "300",b: "400"
},2018: {
a: "303",b: "404"
},...
]
我希望我的结果是这样的:
[{
2017: {
a: "400",b: "600"
},2018: {
a: "404",b: "606"
},...
}]
解决方法
像这样:
let res = [
{
2017: {
a: "100",b: "200",},2018: {
a: "101",b: "202",{
2017: {
a: "300",b: "400",2018: {
a: "303",b: "404",].reduce((acc,el) => {
Object.keys(el).forEach(year => {
if(acc[year]){
acc[year]["a"] += parseInt(el[year]['a'])
acc[year]["b"] += parseInt(el[year]['b'])
} else {
acc[year] = {
a: parseInt(el[year]['a']),b: parseInt(el[year]['b'])
}
}
})
return acc;
},{});
console.log(res)
Object.keys
仅当数组中的对象可能有不同的年份时才需要,但如果这些年份始终是 2017 年和 2018 年,则可以将其删除