2017-05-03 37 views
2

我試圖從表單元素創建對象。出於某種原因,它正在拋出錯誤。減少功能與空對象不工作

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 '' 
+0

似乎'userObj'是一個字符串? –

+1

'reduce'回調需要返回累加器。 – loganfsmyth

回答

4

你需要返回累加器或在你的情況下每次減少迭代userObj所以你的代碼應該看起來像這樣。

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

的問題是你返回你的減速被稱爲第二次,不是你下手。

您正在返回一個作業,但應返回一個對象。

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

像這樣的東西應該工作:

allInputs.reduce(
    (userObj, data) => Object.assign(userObj, { 
    [data.name]: data.value 
    }), 
    {} 
); 

注:如由維克在評論中提及,不需要串插,即${data.name} - >只是data.name就夠了。

+0

可以這樣做:'[data.name]:data.value'而不是'$(...)'? – Vic

+0

@Vic yup,我編輯相應。 – nem035

+0

不要把'userObj'作爲第一個參數給Object.assign嗎?對於重複名稱,這也可能與原始文件有不同的行爲。 – loganfsmyth