2017-05-03 2 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

accumulator를 반환하거나 귀하의 사례에 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

@ 빅치 그래, 나는 그에 따라 편집했다. – nem035

+0

'Object.assign'에 대한 첫 번째 인수로'userObj'를 넣지 않는 이유는 무엇입니까? 이것은 또한 중복 이름에 대해 원본과 다른 행동을했을 가능성이 큽니다. – loganfsmyth

관련 문제