Javascript 简单对象默认覆盖

标签 javascript performance

蓝本

我有一个简单的对象,我想用另一个对象覆盖它,以防对象中不存在某些属性,它应该从默认的预设对象中获取,可能嵌套很深

这是默认设置对象的示例

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/

相关文章:

javascript - 如何确定从序列中删除子序列的所有可能方式?

javascript - 类中的构造方法未被调用

javascript - React - 如何实现复选框?

mysql - 在联接中使用 LIKE 时的性能问题

performance - Scala快速生成上三角矩阵坐标

Javascript 绑定(bind)函数调用到 id

performance - 与 Entity Framework 平行。与启动多个可执行文件相比,性能是惊人的,为什么呢?

mysql - 如何在低规范系统的大表上提高 MySQL 性能?

c# - LINQ 的替代品 .Contains()

javascript - 试图理解回调函数