如何使用Object.assign()函数复制/覆盖对象?

时间:2018-07-31 06:50:54

标签: javascript angular

如何使用Object.assign()完全复制/覆盖对象? 如果有另一种方法,将不胜感激。 :) 目的是将现有对象更新为新值。

下面是我的代码段,预期结果应仅与object2的值相同。

  

预期结果:{a:8,b:7}

const object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

Object.assign(object1, object2);

console.log(object1);

2 个答案:

答案 0 :(得分:4)

要保留相同的对象引用,可以预先删除所有属性,然后使用Object.assign分配所需的属性。

const object1 = { a: 1, b: 2, c: { d: 3 } };
const object2 = { a: 8, b: 7 };

Object.assign(
    Object.keys(object1).reduce((o, k) => (Reflect.deleteProperty(o, k), o), object1),
    object2
);

console.log(object1);

IE

var object1 = { a: 1, b: 2, c: { d: 3 } },
    object2 = { a: 8, b: 7 };

Object.keys(object2).reduce(
    function (object, key) {
        object[key] = object2[key];
        return object;
    }, 
    Object.keys(object1).reduce(function (object, key) {
        delete object[key];
        return object;
    }, object1)
);

console.log(object1);

答案 1 :(得分:0)

如果要用object1中的属性覆盖object2属性,则需要这样做:

object1 = Object.assign({}, object2);

但是与此相关的是,您需要使用object1关键字声明var,以便为它分配一个新值。

演示:

var object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

object1 = Object.assign({}, object2);

console.log(object1);