代码之家  ›  专栏  ›  技术社区  ›  Rasim Avcı

使用spread操作符更新对象值

  •  66
  • Rasim Avcı  · 技术社区  · 6 年前

    我有一个向传入对象添加键的函数,但我被告知要使用扩展操作符,我被告知可以使用扩展操作符创建具有相同属性的新对象,然后在其上设置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
    
    2 回复  |  直到 4 年前
        1
  •  136
  •   T.J. Crowder    6 年前

    属性已添加 整齐 ,因此,如果要覆盖现有属性,则需要将其放在末尾而不是开头:

    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
  •  26
  •   Brent Washburne Jaz13    4 年前

    如果你知道物业的名称( 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);