Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用扩展运算符更新对象值_Javascript_Spread Syntax - Fatal编程技术网

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

Javascript 使用扩展运算符更新对象值,javascript,spread-syntax,Javascript,Spread Syntax,我有一个函数,它向传入对象添加一个键,但我被告知要使用扩展运算符,我被告知可以使用扩展运算符创建具有相同属性的新对象,然后在其上设置isAvailable return new Partner(ServerConfig, capabilities, initialState) } class Partner { constructor (ServerConfig, capabilities, initialState) { initialState.isAvailable =

我有一个函数,它向传入对象添加一个键,但我被告知要使用扩展运算符,我被告知可以使用扩展运算符创建具有相同属性的新对象,然后在其上设置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
属性是按顺序添加的,因此如果要覆盖现有属性,则需要将它们放在末尾而不是开头:

return {
  value: {
    ...initialState,
    ...newObject
  }
}
您不需要
newObject
(除非您已经有了它),但是:

例如:

const o1={a:“原始a”,b:“原始b”};
//不起作用:
常数o2={a:“更新的a”,…o1};
控制台日志(o2);
//作品:
常数o3={…o1,a:“更新的a”};

控制台日志(o3)
如果您知道属性的名称(
a
,在下面的示例中),那么@crowder的答案是完美的:

const o3 = {...o1, a: "updated a"};
console.log(o3);
如果属性名称位于变量中,则需要使用语法:


不是操作员。它是语法、符号,但不是运算符(如
for
语句中的
()
)。理想情况下,给出一个可以执行的独立示例。
const o3 = {...o1, a: "updated a"};
console.log(o3);
let variable = 'foo'
const o4 = {...o1, [variable]: "updated foo"};
console.log(o4);