Jam*_*een 0 javascript arrays object immutability reducers
我有一个对象
usersById: {
1: { name: 'John' },
2: { name: 'Michelle' },
...
}
Run Code Online (Sandbox Code Playgroud)
我想返回相同的对象,但首先使用新属性填充 id=2 处的对象age,但坚持不变性。
我猜它会是这样的
return {
...usersById,
...usersById[2].age = 40
}
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误In this environment the sources for assign MUST be an object. This error is a performance optimization and not spec compliant。
或者,我猜它应该是这样的
return Object.keys(usersById).map(userId => {
if (userId === 2) {
return {
...usersById[2],
...age = 40
}
}
return usersById[userId]
})
Run Code Online (Sandbox Code Playgroud)
但它返回一个数组而不是一个对象。
您的想法是正确的,但语法错误。试试这个:
return {
...usersById,
2: {
...usersById[2],
age: 40
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果密钥是动态的,您可以这样做:
let key = 2;
return {
...usersById,
[key]: {
...usersById[key],
age: 40
}
}
Run Code Online (Sandbox Code Playgroud)