我如何动态合并两个JavaScript对象的属性?
我需要能够在运行时合并两个(非常简单的)JavaScript对象。 例如,我想:
var obj1 = { food: 'pizza', car: 'ford' }
var obj2 = { animal: 'dog' }
obj1.merge(obj2);
//obj1 now has three properties: food, car, and animal
有没有人有这个脚本或知道内置的方式来做到这一点? 我不需要递归,也不需要合并函数,只需要平面对象上的方法。
使用:
//Takes any number of objects and returns one merged object
var objectMerge = function(){
var out = {};
if(!arguments.length)
return out;
for(var i=0; i<arguments.length; i++) {
for(var key in arguments[i]){
out[key] = arguments[i][key];
}
}
return out;
}
它经过测试:
console.log(objectMerge({a:1, b:2}, {a:2, c:4}));
它导致:
{ a: 2, b: 2, c: 4 }
戈西的David Coallier方法的延伸:
检查这两行:
from = arguments[i];
Object.getOwnPropertyNames(from).forEach(function (name) {
需要检查空对象的“from”...如果例如合并来自先前在服务器上创建的Ajax响应的对象,则对象属性可以具有值“null”,并且在这种情况下上述代码生成一个错误说:
“from”不是一个有效的对象
例如,用“if(from!= null){...}”包装“... Object.getOwnPropertyNames(from).forEach ...”函数将防止发生错误。
JSON字符串和值的深度递归合并 (更好地实现Markus的答案):
码
function mergeRecursive(obj1, obj2) {
for (var p in obj2) {
if( obj2.hasOwnProperty(p)){
obj1[p] = typeof obj2[p] === 'object' ? mergeRecursive(obj1[p], obj2[p]) : obj2[p];
}
}
return obj1;
}
例:
o1 = { a:1, b:2, c:{ ca:1, cb:2, cc:{ cca:100, ccb:200 }}};
o2 = { a:10, c:{ ca:10, cb:20, cc:{ cca:101, ccb:202 }}};
mergeRecursive(o1, o2);
输出:
{ a : 10,
b : 2,
c : {
ca : 10,
cb : 20,
cc : {
cca : 101,
ccb : 202
}
}
};
链接地址: http://www.djcxy.com/p/4697.html
上一篇: How can I merge properties of two JavaScript objects dynamically?