我很困惑如何总结这样的两个对象:
obj1 = {
'over_due_data': 10,
'text_data': 5
}
obj2 = {
'over_due_data': 20,
'text_data': 5
}
我去了这个输出
obj = {
'over_due_data': 30,
'text_data': 10
}
还有一件事,不要使用for
循环,合并和扩展。是否可以将两个对象相加?
答案 0 :(得分:9)
尝试使用Object.keys()
和Array#map()
功能
obj1 = {
'over_due_data': 10,
'text_data': 5
}
obj2 = {
'over_due_data': 20,
'text_data': 5
}
var obj ={}
Object.keys(obj1).map(function(a){
obj[a] = obj1[a] +obj2[a]
})
console.log(obj)

答案 1 :(得分:3)
如果您不想使用loop
obj1 = {
'over_due_data': 10,
'text_data': 5
}
obj2 = {
'over_due_data': 20,
'text_data': 5
}
var obj = {};
obj['over_due_data'] = obj1['over_due_data'] + obj2['over_due_data']
obj['text_data'] = obj1['text_data'] + obj2['text_data']
console.log(obj)
答案 2 :(得分:1)
另一种可能的解决方案,使用Array#reduce
。
var obj1 = {'over_due_data':10,'text_data':5}, obj2 = {'over_due_data':20,'text_data':5},
obj = Object.keys(obj1).reduce(function(s,a) {
s[a] = obj1[a] + obj2[a];
return s;
}, {})
console.log(obj);

答案 3 :(得分:0)
您可以动态编码:
Users
.find({ user_enabled: true })
.populate({
path: 'books',
match: { 'language': 'en' },
答案 4 :(得分:0)
即使在其中任何一个具有附加属性的情况下,我也使用下面的代码总结了这两个对象。
此解决方案基于Array.prototype.reduce和short-circuit evaluation
Object.keys({ ...obj1, ...obj2 }).reduce((accumulator, currentValue) => {
accumulator[currentValue] =
(obj1[currentValue] || 0) + (obj2[currentValue] || 0);
return accumulator;
}, {});
var obj1 = {
'over_due_data': 10,
'text_data': 5,
'some_add_prop': 80
};
var obj2 = {
'over_due_data': 20,
'text_data': 5,
'add_prop': 100
};
const sumOfObjs = Object.keys({ ...obj1,
...obj2
}).reduce((accumulator, currentValue) => {
accumulator[currentValue] =
(obj1[currentValue] || 0) + (obj2[currentValue] || 0);
return accumulator;
}, {});
console.log(sumOfObjs);
答案 5 :(得分:0)
这个问题已经有很多商品答案,但是我制作了一个可以处理多级对象的版本:
let sumAllKeys = (obj1, obj2) => Object.keys({...obj1, ...obj2}).reduce((acc, key) => {
let key1 = obj1 && obj1[key] || 0;
let key2 = obj2 && obj2[key] || 0;
acc[key] = (typeof key1 == "object" || typeof key2 == "object")
? sumAllKeys(key1, key2)
: (parseFloat(key1) || 0) + (parseFloat(key2) || 0);
return acc;
}, {});
// Example:
let a = {qwerty:1, azerty: {foo:2, bar:3}}
let b = {qwerty:5, azerty: {foo:4}, test:{yes:12, no:13}};
let c = {azerty: {bar:2}, test:{no:1}, another:{child:{subchild:3}}};
console.log("Sum of: ", {a,b,c});
console.log("Equal: ", [a, b, c].reduce(sumAllKeys, {}));
答案 6 :(得分:-1)
尝试这可能会有所帮助
obj1 = {
'over_due_data': 10,
'text_data': 5
}
obj2 = {
'over_due_data': 20,
'text_data': 5
}
var obj ={}
Object.keys(obj1).map(function(a){
obj[a] = obj1[a] +obj2[a]
})
console.log(obj)