如何在javascript中简洁地实现以下操作:
[ {key:'a', value:1}, {key:'a', value:2}, {key:'b', value:4} ]
- >
{'a':[1,2], 'b':[4] }
代码简单是我真正想要的,我已经在使用lodash,但我无法弄清楚如何进行这种操作。
答案 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。