Underscore.js某些对象的所有方法的总和

时间:2015-04-07 13:45:16

标签: javascript underscore.js

是否有一种简单的方法来对对象方法求和。

var obj = {
    a: {
        aa: 12,
        bb: 4
    },
    b: {
        aa: 5,
        bb: 100
    },
    c: {
        aa: 1,
        bb: 150
    }
}

我需要将所有'aa'和'bb'加在一起。 应该像

var res = {
    aa: 18,
    bb: 254
}

5 个答案:

答案 0 :(得分:2)

使用_.reduce

_.reduce(obj, function(total, element) {
      total.aa = total.aa + element.aa; 
      total.bb = total.bb + element.bb; 
      return total;
}, { aa: 0, bb: 0})

答案 1 :(得分:1)

试试这个



var obj = {
    a: {
        aa: 12,
        bb: 4
    },
    b: {
        aa: 5,
        bb: 100
    },
    c: {
        aa: 1,
        bb: 150
    }
};

var result = _.chain(obj)
  .values()
  .reduce(function (c, p) {
    return _.mapObject(c, function (value, key) {
       return p[key] + value;  
    });
  })
  .value();

console.log(result);

<script src="//jashkenas.github.io/underscore/underscore-min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

有几种方法可以做到: 使用两个循环:

var obj = {
    a: {
        aa: 12,
        bb: 4
    },
    b: {
        aa: 5,
        bb: 100
    },
    c: {
        aa: 1,
        bb: 150
    }
};

var result = {};
_.each(obj, function(chd) { 
    _.each(chd, function(val, key) { 
      result[key] = (result[key] || 0) + val;
    } );    

} );
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

答案 3 :(得分:0)

_.reduce(obj, function(total, element) {
  return {
    aa: total.aa + element.aa,
    bb: total.bb + element.bb
  };
}, { aa: 0, bb: 0});

答案 4 :(得分:-1)

这是一个解决方案:

var res = _.reduce(obj, function(sum, o) {
  sum.aa += o.aa;
  sum.bb += o.bb;
  return sum;
});