E6箭头函数将对象数组减少为单个对象

时间:2016-05-26 05:27:32

标签: arrays json ecmascript-6 arrow-functions

我有一个像:

这样的数组
a=[{'test':1,'test2':'2'},{'test':3,'test2':'4'}]

我试图将此数组缩减为一个对象

预期输出

{1:2,3:4}

我试过了:

let newObj = a.reduce((pre,curr)=>Object.assign({},{curr.test:curr.test2}))//unexpected token at .
let newObj = a.reduce((pre,curr)=>Object.assign({},{curr['test']:curr['test2']}))//unexpected token at [

P.S :我已经通过不使用箭头功能实现了我的尝试,我想知道为什么上述方法无法正常工作

1 个答案:

答案 0 :(得分:3)

就像

一样简单
a.reduce(
    (acc, {test: key, test2: value}) => Object.assign({}, acc, {[key]: value}),
    {}
)

所以你在这里做的是 - 将每个元素解构为keyvalue,然后将当前累加器与仅由key-value对组成的新对象组合。

你做错了什么:你不能按原样使用表达式作为对象键,但你必须将它们包装在方括号中。

所以这个{[curr.test]: curr.test2}会起作用。