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

时间:2019-05-28 14:03:57

标签: javascript object spread-syntax

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

这是什么语法? 我尝试过类似的事情:

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

但这不是有效的语法。

3 个答案:

答案 0 :(得分:1)

您将这样编写代码:

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

...obj1将用obj2的内容填充obj1,写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)

答案 1 :(得分:1)

您在右侧扩展了语法。

注意:首先使用Spread Operator,然后设置新属性。例如{c:'D',...foo}不起作用。

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

答案 2 :(得分:-2)

使用点差运算符,然后将要更改的财产放进去

let foo = {a : "Other A", b : "OtherB", c : "OtherC"}
let obj = {a: 'A', b: 'B', c: 'C'}
    obj = {...foo, c : 'D'};
    
    console.log(obj);