我正在寻找一种将两个配置对象合并在一起的方法,例如:
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/