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), {});