我有一个物件

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
  }
}

10-04 19:10