前端面试解析-03 如何进行数组、对象的合并?

一、数组的合并

   1、可以用concat连接

var arr=[1,2,3];
var arr1=[4,5,6,7];
var arr2=arr.concat(arr1);
console.log(arr);   //[1,2,3]
console.log(arr1);  //[4,5,6,7,8]
console.log(arr2);  //[1,2,3,4,5,6,7,8]

可见,concat并不会改变数组arr。

2、如果想要将arr1连接到arr并保存到arr中,可以用Array.protoType.push.apply(arr,arr1); 也可以使用ES6中的拆包语法进行push--arr.push(...arr1);

var arr=[1,2,3];
var arr1=[4,5,6,7,8];
Array.prototype.push.apply(arr,arr1);
console.log(arr);   //[1,2,3,4,5,6,7,8]
var arr=[1,2,3];
var arr1=[4,5,6,7,8];
arr.push(...arr1);
console.log(arr); //[1,2,3,4,5,6,7,8]

二、对象的合并

1、可以用jquery的extend,$.extend(obj1,obj2)会把两个对象合并赋值给第一个对象,$.extend({},obj1,obj2)会把两个对象合并并赋值给一个空的新对象,不会改变原有对象。

//赋值给第一个对象
var obj1={a:1,b:2};
var obj2={c:3,d:4};
var hebing=$.extend(obj1,obj2);
console.log(obj2);      //{c:3,d:4}
console.log(obj1);      //{a:1,b:2,c:3,d:4}
console.log(hebing);    //{a:1,b:2,c:3,d:4}

//赋值给一个新对象
var obj1={a:1,b:2};
var obj2={c:3,d:4};
var hebing=$.extend({},obj1,obj2);
console.log(obj2);      //{c:3,d:4}
console.log(obj1);      //{a:1,b:2}
console.log(hebing);     //{a:1,b:2,c:3,d:4}

2、可以用Object.assign(),可以把任意多个源对象的可枚举属性拷贝给目标对象,并返回目标对象,用法类似于$.extend

//赋值给第一个对象
var obj1={a:1,b:2};
var obj2={c:3,d:4};
var hebing=Object.assign(obj1,obj2);
console.log(obj2);      //{c:3,d:4}
console.log(obj1);      //{a:1,b:2,c:3,d:4}
console.log(hebing);    //{a:1,b:2,c:3,d:4}

//赋值给一个新对象
var obj1={a:1,b:2};
var obj2={c:3,d:4};
var hebing=Object.assign({},obj1,obj2);
console.log(obj2);      //{c:3,d:4}
console.log(obj1);      //{a:1,b:2}
console.log(hebing);     //{a:1,b:2,c:3,d:4}

3、可以使用遍历的方式

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值