我有两个对象obj1和obj2。 我正在尝试将obj2中的属性添加到obj1,而不会覆盖类似的属性
到目前为止,这是我的代码:
var obj1 = {
a: 1,
b: 2
};
var obj2 = {
b: 4,
c: 3
};
function extend(objOne, objTwo) {
objOne = Object.assign(objOne,objTwo)
return objOne
}
extend(obj1, obj2)
console.log('obj1:', obj1)
console.log('obj2:', obj2)
Here's the result I'm having :
// obj1: { a: 1, b: 4, c: 3 }
// obj2: { b: 4, c: 3 }
I'm almost there, but as you can see the `b` value in obj1
is being overwritten by the `b`value from obj2
my desired result would be :
// obj1: { a: 1, b: 2, c: 3 }
// obj2: { b: 4, c: 3 }
I tried using the spread operator but with no success
答案 0 :(得分:2)
您可以使用空对象并在Object.assign
中切换对象的顺序。
然后使用新对象进行obj1
的分配。
var obj1 = { a: 1, b: 2 },
obj2 = { b: 4, c: 3 };
Object.assign(obj1, Object.assign({}, obj2, obj1));
console.log(obj1); // { a: 1, b: 2, c: 3 }
console.log(obj2); // { b: 4, c: 3 }

答案 1 :(得分:1)
也许尝试将objOne中的属性添加到objTwo,thew将从objOne重写objTwo中的道具
function extend(objOne, objTwo) {
newObj = Object.assign(objTwo,objOne)
return newObj
}
答案 2 :(得分:1)
我可以看到其他答案是正确的。但我假设您要保留关键订单。那么这可能是解决方案:
function extend(objOne, objTwo) {
Object.assign(objOne, Object.assign({},objTwo, objOne));
return objOne;
}
obj1 = extend(obj1,obj2);
console.log('obj1:', obj1); // { a: 1, b: 2, c: 3 }
console.log('obj1:', obj2); // { b: 4, c: 3 }
以下是jsfiddle链接:https://jsfiddle.net/5xufsg7j/1/
答案 3 :(得分:1)
似乎Object.assign()
没有完全按照你想要的那样做(防止覆盖已经存在的目标属性)并且你想直接修改现有对象而不是创建一个新对象,所以真的没问题制作自己的功能:
function extend(target, source) {
for (var prop in source) {
if (source.hasOwnProperty(prop) && !target.hasOwnProperty(prop)) {
target[prop] = source[prop];
}
}
return target;
}