我正在对大量对象进行重复数据删除,其中许多对象具有一些共同的属性。所有属性都是整数。
循环遍历键并手动合并非常容易,但我忍不住觉得有 Object.assign
和 map
和 的某种组合>reduce
可以做到这一点是一行。随着语言的成熟,保持领先地位似乎是值得的。
编辑:举个例子:
let A = {
"a": 10,
"e": 2,
"g": 14
}
let B = {
"b": 3,
"e": 15,
"f": 1,
"g": 2,
"h": 11
}
let C = Object.magicMerge(A, B)
/*
{
"a": 10,
"e": 17,
"g": 16
"b": 3,
"f": 1,
"h": 11
}
*/
最佳答案
vanilla JS 中实际上没有任何快捷方式,您必须显式地迭代每个对象和每个属性,并以某种方式对它们进行求和。一种选择是使用 reduce
进行分组:
const arr = [{
foo: 1,
bar: 2
}, {
bar: 5,
baz: 7
}, {
baz: 10,
buzz: 10
}];
const combined = arr.reduce((a, obj) =>
Object.entries(obj).reduce((a, [key, val]) => {
a[key] = (a[key] || 0) + val;
return a;
}, a)
, {});
console.log(combined);
我更喜欢reduce
,因为外部combined
变量一旦创建,就不会在其范围内发生变化,但您可以使用for..of
如果您愿意,可以改为:
const arr = [{
foo: 1,
bar: 2
}, {
bar: 5,
baz: 7
}, {
baz: 10,
buzz: 10
}];
const combined = {};
for (const obj of arr) {
for (const [key, val] of Object.entries(obj)) {
combined[key] = (combined[key] || 0) + val;
}
}
console.log(combined);
关于javascript - 在 JavaScript 中,有一种优雅的方法来合并两个对象并对任何公共(public)属性求和吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441263/