码迷,mamicode.com
首页 > 其他好文 > 详细

对象合并

时间:2018-08-22 12:43:27      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:call   des   function   key   rri   行合并   ide   ring   array   

写组件的时候经常会用到默认设置,而默认设置经常以对象形式传参

 

//方法一
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;
}

对象合并

标签:call   des   function   key   rri   行合并   ide   ring   array   

原文地址:https://www.cnblogs.com/konghaowei/p/9322651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!