【问题标题】:Using spread operator to update an object value使用扩展运算符更新对象值
【发布时间】:2018-09-04 14:15:12
【问题描述】:

我有一个向传入对象添加键的函数,但有人告诉我为此使用扩展运算符,有人告诉我可以使用扩展运算符创建一个具有相同属性的新对象,然后设置isAvailable 就可以了。

  return new Partner(ServerConfig, capabilities, initialState)
}

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

所以我尝试了类似的方法但无法成功,您能帮帮我吗?很困惑,我应该以这种方式使用扩展运算符,从函数返回吗?

newObject = {}

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

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

initialState.isAvailable = true

【问题讨论】:

  • ... 不是操作员。它是语法、符号,但不是运算符(如 for 语句中的 ())。
  • 请正确格式化您的代码。理想情况下,给出一个可以执行的独立示例。

标签: javascript spread-syntax


【解决方案1】:

属性是按顺序添加的,所以如果你想覆盖现有的属性,你需要把它们放在末尾而不是开头:

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);

【讨论】:

    【解决方案2】:

    如果您知道房产的名称(下例中为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);
    

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2017-06-13
      • 1970-01-01
      • 2017-06-12
      • 2017-11-15
      • 1970-01-01
      • 2019-04-26
      • 2019-09-29
      相关资源
      最近更新 更多