Javascript 带有空对象的reduce函数不工作

Javascript 带有空对象的reduce函数不工作,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在尝试从表单元素创建对象。出于某种原因,它抛出了错误 let allInputs = [...formData]; allInputs.pop(); //Remove submit button return allInputs.reduce((userObj, data) => userObj[`${data.name}`] = data.value, {}); 错误 userModel.js:17 Uncaught TypeError: Cannot create proper

我正在尝试从表单元素创建对象。出于某种原因,它抛出了错误

let allInputs = [...formData]; 
allInputs.pop(); //Remove submit button
return allInputs.reduce((userObj, data) => userObj[`${data.name}`] = data.value, {});
错误

userModel.js:17 Uncaught TypeError: Cannot create property 'last_name' on string ''

问题在于第二次调用减速机时返回的是什么,而不是从什么开始

您正在返回赋值,但应返回对象

(userObj, data) => userObj[`${data.name}`] = data.value // <-- this returns the result of the assignment

注意:正如Vic在评论中提到的,不需要字符串插值,即
${data.name}
->只要
数据.name
就足够了。

在reduce的每次迭代中,您需要返回累加器或
userObj
,因此您的代码应该是这样的

allInputs.reduce((userObj, data) => (userObj[`${data.name}`] = data.value, userObj), {});

似乎
userObj
是一个字符串?
reduce
回调需要返回累加器。这是否可以是:
[data.name]:data.value
而不是
$(…)
?是否有理由不将
userObj
作为
对象的第一个参数。分配
?对于重复的名称,这也可能有不同于原始名称的行为。@loganfsmyth是的,这样做更有意义。我相当机械地输入了args:)
allInputs.reduce((userObj, data) => (userObj[`${data.name}`] = data.value, userObj), {});