蓝本
我有一个简单的对象,我想用另一个对象覆盖它,以防对象中不存在某些属性,它应该从默认的预设对象中获取,可能嵌套很深
这是默认设置对象的示例
defaults = {
name : 'Joe',
options : {
color : 'green',
dates : {
from : new Date,
to : new Date,
}
}
}
这是提供的对象
settings = {
name : 'David',
options : {
color : 'purple'
}
}
这是预期的结果,两者的结合...
final = {
name : 'David',
options : {
color : 'purple',
dates : {
from : new Date,
to : new Date,
}
}
}
有没有一种不使用任何外部库的简单方法来实现这一点?我已经尝试了一些方法(JSON.stringify/parse
/遍历对象/等等...)但无法得到一个干净的解决方案...希望是一个 oneliner
任何帮助将不胜感激......
最佳答案
使用此 $.extend(true, {}, defaults,settings)
。注意json变量的顺序。在这种情况下,如果这两个变量具有相同的属性,settings
将覆盖 defaults
。
如果您正在研究纯 JS 答案。这是代码。
function extend(a, b){
for (var key in b) {
if (b.hasOwnProperty(key))
a[key] = b[key];
return a;
}
}
}
console.log(extend(defaults,settings));
关于Javascript 简单对象默认覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301873/