我有一个物件
usersById: {
1: { name: 'John' },
2: { name: 'Michelle' },
...
}
我想返回相同的对象,但首先使用新属性
age
填充id = 2的对象,但坚持不变性。我想那会像
return {
...usersById,
...usersById[2].age = 40
}
但我收到错误
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]
})
但它返回一个数组而不是一个对象。
最佳答案
您有正确的主意,但语法错误。尝试以下方法:
return {
...usersById,
2: {
...usersById[2],
age: 40
}
}
或者,如果密钥是动态的,则可以执行以下操作:
let key = 2;
return {
...usersById,
[key]: {
...usersById[key],
age: 40
}
}