如何使用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);
答案 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);