如何在javascript中求和两个对象值

时间:2017-04-06 08:31:26

标签: javascript jquery

我很困惑如何总结这样的两个对象:

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循环,合并和扩展。是否可以将两个对象相加?

7 个答案:

答案 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.reduceshort-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)