JavaScript中【数组的合并】和【对象的合并 (浅克隆,深克隆)】

1. 数组合并

1.1 数组concat()方法

//concat()
//数组的拼接方法,返回拼接后的新数组
var arr1 = [1,2,3];
var arr2 = [5,6,7];
var res = arr1.concat(arr2);
console.log(res); //[1,2,3,5,6,7]
console.log(arr1); //[1,2,3] arr1自身没有改变 

1.2 遍历循环数组

//循环遍历数组
//for in和for of是遍历对象用的,前者遍历对象的key,后者遍历对象的value
var arr1 = ['a','b'];
var arr2 = ['c','d','e'];
for(var i = 0; i < arr2.length; i++){
    arr1.push(arr2[i]);
}
console.log(arr1); //['a','b','c','d','e']

1.3 apply方法
合并数组用Array.prototype.push.apply(arr1,arr2)或者arr1.push.apply(arr1,arr2)

//apply
var arr1 = [2,3];
var arr2 = [5,6,7];
Array.prototype.push.apply(arr1,arr2); //指向arr1,apply接收数组并执行
//arr1.push.apply(arr1,arr2);
console.log(arr1); //[2,3,5,6,7]

2. 对象的合并

2.1 Object.assign()
可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
Object.assign(target, …sources)
第一个参数:target(目标对象),之后参数都是源对象

//Object.assign()
var obj1 = {
    a : 1,
    b : 2
};
var obj2 = {
    c : 3,
    d : 6
};
var obj3 = {
    e : 7,
};
var res1 = Object.assign({},obj1,obj2);
var res2 = Object.assign(obj1 , obj2 , obj3);
console.log(res1); //{a: 1, b: 2, c: 3, d: 6}
console.log(res2); //{a: 1, b: 2, c: 3, d: 6, e: 7}
console.log(obj1); //目标对象也改变了{a: 1, b: 2, c: 3, d: 6, e: 7}

2.2 循环遍历对象(for in)

//对象遍历赋值
var obj1 = {
    a : 1,
    b : 2
};
var obj2 = {
    c : 3,
    d : 6
};
for(var key in obj2){
    //此处hasOwnProperty是判断自有属性,
    //使用for in循环遍历对象的属性时,
    //原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰
   if(obj2.hasOwnProperty(key) === true){
       obj1[key] = obj2[key];
   }
}
console.log(obj1); //{a: 1, b: 2, c: 3, d: 6}

2.4 对象的深拷贝和浅拷贝

JavaScript例子
浅拷贝

var obj = { a:1, arr: [2,3] };
var shallowObj = shallowCopy(obj);

function shallowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return dst;
}

深拷贝

var china = {
  	nation : '中国',
  	birthplaces:['北京','上海','广州'],
  	skincolr :'yellow',
  	friends:['sk','ls']
}
  //深复制,要想达到深复制就需要用递归
  function deepCopy(o,c){
    var c = c || {}
    for(var i in o){
    if(typeof o[i] === 'object'){
  	   	   	//要考虑深复制问题了
            if(o[i].constructor === Array){
                	//这是数组
                	c[i] =[]
                }else{
                	//这是对象
                	c[i] = {}
                }
                deepCopy(o[i],c[i])
  	   	   }
  	   	   else{
  	   	   	 c[i] = o[i]
  	   	   }
  	   }
  	   return c
  }
  var result = {name:'result'}
  result = deepCopy(china,result)
  console.dir(result)

参考:js中数组的合并和对象的合并

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值