Arrays E6 arrow函数将对象数组简化为单个对象

Arrays E6 arrow函数将对象数组简化为单个对象,arrays,json,ecmascript-6,arrow-functions,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.assig

我有这样一个数组:

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:我已经通过不使用箭头函数实现了我正在尝试的目标,我想知道为什么上面的方法不起作用

a.reduce(
    (acc, {test: key, test2: value}) => Object.assign({}, acc, {[key]: value}),
    {}
)
因此,这里要做的是-将每个元素分解为
key
value
,然后将当前累加器与仅由这些
key-value
对组成的新对象组合

你做错了什么:你不能像现在一样使用表达式作为对象键,但是你必须把它们放在方括号里

所以这个
{[curr.test]:curr.test2}
可以工作

a.reduce(
    (acc, {test: key, test2: value}) => Object.assign({}, acc, {[key]: value}),
    {}
)
因此,这里要做的是-将每个元素分解为
key
value
,然后将当前累加器与仅由这些
key-value
对组成的新对象组合

你做错了什么:你不能像现在一样使用表达式作为对象键,但是你必须把它们放在方括号里


所以这个
{[curr.test]:curr.test2}
可以工作。

Wow!!没想到这么简单。还没有找到任何关于如何使用表达式作为obj键的文档…谢谢ton@NishanthMatha(寻找“计算属性名称”)哇!!没想到这么简单。还没有找到任何关于如何使用表达式作为obj键的文档…谢谢ton@NishanthMatha(查找“计算属性名称”)