使用扩展运算符更新对象值

Using spread operator to update an object value

我有一个函数可以为传入的对象添加一个键,但我被告知要为此使用扩展运算符,我被告知我可以使用扩展运算符创建一个具有相同属性和然后在其上设置 isAvailable。

  return new Partner(ServerConfig, capabilities, initialState)
}

class Partner {
  constructor (ServerConfig, capabilities, initialState) {
    initialState.isAvailable = true

所以我尝试了类似的方法但是没有成功,你能帮帮我吗?很困惑,我应该以这种方式使用扩展运算符吗,return 来自函数?

newObject = {}

// use this inside a function and get value from return

       return {
         value: {
           ...newObject,
           ...initialState
         }
       }

initialState.isAvailable = true

属性是按顺序添加的,所以如果要覆盖已有的属性,需要把它们放在最后,而不是放在开头:

return {
  value: {
    ...initialState,
    ...newObject
  }
}

您不需要 newObject(除非您已经准备好了),但是:

return {
  value: {
    ...initialState,
    isAvailable: newValue
  }
}

示例:

const o1 = {a: "original a", b: "original b"};
// Doesn't work:
const o2 = {a: "updated a", ...o1};
console.log(o2);
// Works:
const o3 = {...o1, a: "updated a"};
console.log(o3);

如果您知道 属性 的名称(下例中的 a),那么@crowder 的回答是完美的:

const o3 = {...o1, a: "updated a"};
console.log(o3);

如果属性名称在变量中,则需要使用Computed Property names语法:

let variable = 'foo'
const o4 = {...o1, [variable]: "updated foo"};
console.log(o4);