JS 使用扩展运算符克隆对象并更改一个字段

And*_*mas 5 javascript object spread-syntax

假设我有一个对象:{a: 'A', b: 'B', c: 'C'}并且我想从中创建一个新对象,该对象具有相同的值,但我想设置c: 'D'.

它的语法是什么?我试过类似的东西:

{c: 'D', ...rest} = {...foo}

但这不是有效的语法。

Kob*_*obe 8

你可以这样写你的代码:

var obj1 = {a: 'A', b: 'B', c: 'C'}
var obj2 = {...obj1, c: 'D'}
console.log(obj2)
Run Code Online (Sandbox Code Playgroud)

写入...obj1会填充obj2obj1内容,写入c: 'D'会覆盖c: 'c'

请注意,正如 maheer 提到的,排序很重要,因为对象将从每个属性按顺序写入,这可能会扰乱键的排序并设置不正确的值:

var obj = {a: 'A', b: 'B', c: 'C'}
var ex1 = {...obj, c: 'D'}
var ex2 = {c: 'D', ...obj}
var ex3 = {c: 'D', ...obj, c: 'E'}

console.log('Example 1:', ex1)
console.log('Example 2:', ex2)
console.log('Example 3:', ex3)
Run Code Online (Sandbox Code Playgroud)


Mah*_*Ali 7

你在右手边传播语法。

注意:首先使用扩展运算符,然后设置新属性。例如{c:'D',...foo}不会工作。

let foo = {a: 'A', b: 'B', c: 'C'};
let res = {...foo, c:'D'};
console.log(res)
Run Code Online (Sandbox Code Playgroud)