我想将所有缺少的字段深深地复制到下面的示例代码所示的对象中。是否有快速的es6快捷方式可用于深度复制对象中缺少的属性?
我尝试使用Object.assign
,但问题是它用第二个someKey
对象代替了someKey
,因为我希望它可以简单地复制所有属性。
这些对象也只是一些随机的演示,比如说魔术代码应该是不可知的
const x = {};
const a = { someKey: { first: 1 } };
const b = { someKey: { second: 2 } };
const c = { otherKey: { first: 1 } };
// some magic algorithm to get expected
Object.assign(x, a, b, c); // this doesn't work
const expected = {
someKey: {
first: 1,
second: 2
},
otherKey: {
first: 1
}
};
答案 0 :(得分:4)
拜访lá。运行代码片段进行演示。
const merge = function(){
let target = arguments[0];
Array.prototype.shift.apply(arguments);
while (arguments[0]) {
for (let key of Object.keys(arguments[0]))
if (arguments[0][key] instanceof Object)
Object.assign(arguments[0][key], merge(target[key], arguments[0][key]));
Object.assign(target || {}, arguments[0]);
Array.prototype.shift.apply(arguments);
}
return target;
}
const x = {};
const a = { someKey: { first: 1 } };
const b = { someKey: { second: 2 } };
const c = { otherKey: { first: 1 } };
console.log(merge(x,a,b,c));
答案 1 :(得分:0)
如果要对某些键进行合并,则必须手动进行操作。Object.assign在后发制胜时起作用,因此要合并键,您需要以下内容...
Object.assign({}, a, b, c, {someKey: Object.assign({}, a.someKey, b.someKey)})
以下代码可以阅读为...。 将“ A”,“ B”和“ C”合并在一起。...将“ A.someKey和b.someKey”合并在一起来覆盖someKey。