如何合并这样的两个(或更多)JS对象?
结果应包含所有函数(如showUser和showOtherData),并且事件和请求数组也应该合并。
var object1 = {
events: {
'app.activated': 'showUser'
},
requests: {
},
showUser: function() {
console.log("es jhsod")
},
};
var object2 = {
events: {
'app.destroyed': 'hideUser'
},
requests: {
main: {
url: 'http://example/api/main',
data: {
format: 'json'
}
}
},
showOtherData: function() {
console.log("foobar")
},
};
答案 0 :(得分:2)
我知道已经有一些实现,但编写递归函数非常有趣。再针对您的问题再检查extend
函数。它还支持无限数量的参数:
function extend() {
var result = {}, obj;
for (var i = 0; i < arguments.length; i++) {
obj = arguments[i];
for (var key in obj) {
if (Object.prototype.toString.call(obj[key]) === '[object Object]') {
if (typeof result[key] === 'undefined') {
result[key] = {};
}
result[key] = extend(result[key], obj[key]);
}
else {
result[key] = obj[key];
}
}
}
return result;
}
console.log(extend(object1, object2, object3));
演示: http://jsfiddle.net/zgbwtp4g/,http://jsfiddle.net/zgbwtp4g/1
答案 1 :(得分:1)
没有简单的方法,但是不同的库存在各种在线实现,即lodash merge或jquery extend。您可以看到这些实现并自行实现。
这似乎显示了一个很好的实现:merge