[英]How to sum two object values in javascript
I'm stuck how i sum two object like this:我被困住了如何对两个对象求和:
obj1 = {
'over_due_data': 10,
'text_data': 5
}
obj2 = {
'over_due_data': 20,
'text_data': 5
}
I went this output我去了这个输出
obj = {
'over_due_data': 30,
'text_data': 10
}
One more thing, don't use a for
loop, merge and extend.还有一件事,不要使用for
循环,合并和扩展。 Is it possible to sum two objects?是否可以将两个对象相加?
try with simply use Object.keys()
and Array#map()
function尝试简单地使用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).forEach(function(a){ obj[a] = obj1[a] +obj2[a] }) console.log(obj)
Another possible solution, using Array#reduce
.另一种可能的解决方案,使用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);
Try something like this if you don't want to use loop
如果您不想使用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)
you can code it dynamically :你可以动态编码:
var resultObject={};
Object.keys(obj1).forEach(function(objectKey, index) {
resultObject[objectKey]= obj1 [objectKey]+obj2[objectKey];
});
I have used below snippet to sum the two objects even if any of them has additional properties.我已经使用下面的代码片段来总结这两个对象,即使它们中的任何一个具有附加属性。
This solution is based on Array.prototype.reduce and short-circuit evaluation此解决方案基于Array.prototype.reduce和短路评估
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);
This question already have a lot of goods answers but I make a version who also handle multi-levels objects:这个问题已经有很多商品的答案,但我制作了一个也处理多级对象的版本:
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, {}));
Try this might be helpful试试这可能会有所帮助
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.