lodash - 将两个数组分组或加到对象中

时间:2016-02-18 16:07:49

标签: javascript lodash

我有两个数组(一个键和一个值),我希望将它们组合成一个对象,并在键相同时对值进行求和。

var keys = ['a', 'b', 'a', 'c'];
var values = [1, 2, 2, 3];

我尝试使用lodash zibObject(),但无法使用此函数对值求和。我想使用zipWith()将是解决方案,但我不知道如何总结。

var grouped = _.zipWith(keys, values, function(a,b){
    return {a: b}; // not summing: [{a: 1}, {b: 2}, {a, 2}, {c: 3}]
});

但我想要的是:

var result = {
    a: 3,
    b: 2,
    c: 3
};

用lodash实现这个目标的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

没有lodash或下划线



var keys = ['a', 'b', 'a', 'c'];
var values = [1, 2, 2, 3];
var grouped = {};

if (keys.length !== values.length) throw "array don't match!!"
for (var i = 0, len = keys.length; i < len; i++) {
  grouped[keys[i]] = grouped[keys[i]] + values[i] || values[i];
}
document.getElementById('final').innerHTML = JSON.stringify(grouped);
&#13;
<pre id="final"></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用_.reduce使用对象作为初始值:

var out = _.reduce(keys, function (p, c, i) {
  p[c] = p[c] || 0;
  p[c] += values[i];
  return p;
}, {});

DEMO

答案 2 :(得分:1)

_.reduce(keys, function(result, key, index){
    result[key] = result[key] ? result[key] + values[index] : values[index];
    return result;
}, {})