映射对象数组并在javascript中按键分组

时间:2014-12-17 00:36:57

标签: javascript arrays object lodash

如何在javascript中简洁地实现以下操作:

[ {key:'a', value:1}, {key:'a', value:2}, {key:'b', value:4} ]

- >

{'a':[1,2], 'b':[4] }

代码简单是我真正想要的,我已经在使用lodash,但我无法弄清楚如何进行这种操作。

1 个答案:

答案 0 :(得分:5)

尝试使用reduce



var arr = [ {key:'a', value:1}, {key:'a', value:2}, {key:'b', value:4} ];

var obj = arr.reduce(function(acc, x) {
    if (!acc[x.key]) acc[x.key] = [];
    acc[x.key].push(x.value);
    return acc;
}, {});

document.write(JSON.stringify(obj));




有关详细信息,请参阅MDN docs on reduce

如果您必须支持IE8或更低版本(没有reduce),您可以使用a polyfill,或者您可以手动循环遍历数组并设置对象键(看起来更丑)。它看起来像lodash also already has a reduce function, too