使用spread运算符更新对象值

时间:2018-03-26 12:22:00

标签: javascript spread-syntax

我有一个函数可以为传入的对象添加一个键,但我被告知使用传播运算符,我被告知我可以使用传播运算符创建一个具有相同属性的新对象然后设置是可以的。

  return new Partner(ServerConfig, capabilities, initialState)
}

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

所以我尝试过这样的事情但是成功了,你能帮助我吗?并且困惑,我应该以这种方式使用spread运算符,从函数返回吗?

newObject = {}

//在函数中使用它并从return

获取值
   return {
     value: {
       ...newObject,
       ...initialState
     }
   }

initialState.isAvailable = true

2 个答案:

答案 0 :(得分:15)

属性按顺序添加,因此如果要覆盖现有属性,则需要将它们放在最后而不是开头:

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




答案 1 :(得分:8)

如果您知道属性的名称(在下面的示例中为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);