javascript - 像 jQuery.extend() 但独立的东西?

标签 javascript

我正在寻找一种将两个配置对象合并在一起的方法,例如:

var developmentConfig = {
  url: "localhost",
  port: 80
};

var productionConfig = {
  url: "example.com"
};

var config = isDevelopment ? developmentConfig : jQuery.extend(developmentConfig, productionConfig);

但是,这是一个 Node.js 应用程序,我不想包含 jQuery,我正在寻找类似但独立的东西。我知道我自己可以写一些类似的东西,但我宁愿使用经过测试和证明的东西(有一些边缘情况,配置对象使用更丰富的层次结构时的复杂性等)

编辑:简单的迭代是不够的,因为它不处理层次结构。 Underscore 的 extend 也没有。

最佳答案

如果您只需要扩展,那么将其写成几行就非常简单了。如果你想要递归扩展,如果你想要循环结构、具有复杂原型(prototype)链的对象等,那么完全通用地做到这一点是很棘手的。如果它只是一些嵌套的普通对象,那么这应该可行:

function extend (target, source) {
  target = target || {};
  for (var prop in source) {
    if (typeof source[prop] === 'object') {
      target[prop] = extend(target[prop], source[prop]);
    } else {
      target[prop] = source[prop];
    }
  }
  return target;
}

如果您正在寻找一个轻量级库来执行此操作(由于上面列出的原因减去递归)和 javascript 未提供的其他类似功能,请查看 Underscore也可以通过 NPM 获得节点。

关于javascript - 像 jQuery.extend() 但独立的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317003/

相关文章:

javascript - 如何在这里摆脱代码重复(lint 错误)

javascript - 按字符串数组过滤javascript数组

javascript - 为什么我的 Handlebars 没有编译方法?

javascript - 嵌套每个循环导致问题

javascript - 将 clientWidth/clientHeight Javascript 与 webgl 一起使用会返回问题

javascript - 基于 scrollTop 和 scrollUp 的站点标题是否可见?

javascript - 使用ajax更新其他页面的div

javascript - 多个 AJAX 成功顺序

javascript - 使用 listChanged 参数

变量的 JavaScript 设置值失败