作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将所有缺失的字段深度复制到下面示例代码所示的对象中。是否有快速的 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
}
};
最佳答案
Voit 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));
关于javascript - 如何在 ES6/Javascript 中深度复制对象而不替换整个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51995218/
我是一名优秀的程序员,十分优秀!