对象合并
Posted konghaowei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象合并相关的知识,希望对你有一定的参考价值。
写组件的时候经常会用到默认设置,而默认设置经常以对象形式传参
//方法一
function objMerge(obj1, obj2) {
//var key;
for(key in obj2) {
// 如果target(也就是obj1[key])存在,且是对象的话再去调用deepMerge,
//否则就是obj1[key]里面没这个对象,需要与obj2[key]合并
obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
deepMerge(obj1[key], obj2[key]) : obj1[key] = obj2[key];
}
return obj1;
};
//方法二
function DeepExtend(obj1,obj2){
if(Object.prototype.toString.call(obj1) === ‘[object Object]‘ && Object.prototype.toString.call(obj2) === ‘[object Object]‘){
for( prop2 in obj2){//obj1无值,都有取obj2
if(!obj1[prop2]){
obj1[prop2] =obj2[prop2];
}else{//递归赋值
obj1[prop2]=DeepExtend(obj1[prop2],obj2[prop2]);
}
}
}else if(Object.prototype.toString.call(obj1) === ‘[object Array]‘ && Object.prototype.toString.call(obj2) === ‘[object Array]‘){
// 两个都是数组,进行合并
obj1=obj1.concat(obj2);
}else{//其他情况,取obj2的值
obj1 = obj2;
}
return obj1;
};
//方法三
function extend(des, src, override){
if(src instanceof Array){
for(var i = 0, len = src.length; i < len; i++)
extend(des, src[i], override);
}
for( var i in src){
if(override || !(i in des)){
des[i] = src[i];
}
}
return des;
}
以上是关于对象合并的主要内容,如果未能解决你的问题,请参考以下文章