对象合并

在项目的开发过程中,我们可能会遇到这样的需求:将两个对象合并成一个对象,然后在进行数据的处理,那么在js中,人如何合并对象呢?
举一个最简单的栗子:
假设现在有两个对象:

var obj1 = { name:'张三' };
var obj2= { age:18 };

我们想要得到obj3 = {name:’张三’,age:18};
方法一:使用JQuery的extend方法

$.extend(obj1 , obj2 );

此时我们就得到了 obj3 = {name:’张三’,age:18};
这里写图片描述
可以自己动手试一下

jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。

注意:
1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
2. 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。
在看一个栗子:

var obj1 = { name:'张三' };
var obj2= { name:'李四' };
$.extend(obj1 , obj2 );

name此时我们得到的是一个什么样的obj3呢?
这里写图片描述
obj3里面只有一个name,而且值是‘李四’,即后者将前者的属性值覆盖了。
还有一个问题,我们来看一下,还用上面的代码:

var obj1 = { name:'张三' };
var obj2= { age:18 };
var obj3 = $.extend(obj1,obj2);

console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj1 === obj3);

这里写图片描述
我们看到 obj1被更改了,并且和obj3相等。
如果我们并不想改变obj1怎么办呢?那就是给$.extend()设置一个target,例如:

var obj1 = { name:'张三' };
var obj2= { age:18 };

var obj3 = $.extend({},obj1,obj2);

console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj1 === obj3);

结果如下:
这里写图片描述
方法二:用 Object.assign()
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
它可以复制一个对象:
例如:

var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

结果:
这里写图片描述
同样的,Object.assign()方法,如果多个对象具有相同的属性,则后者也会覆盖前者的属性值,栗子:

var obj1 = { name:'张三' };
var obj2= { name:'李四' };
var obj3 = Object.assign(obj1,obj2);
console.log(obj3);

结果:
这里写图片描述
而且,它也会修改目标对象的值,栗子:

var obj1 = { name:'张三' };
var obj2= { age:18 };
var obj3 = Object.assign(obj1,obj2);
console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj1 === obj3)

这里写图片描述
我们看到 obj1也被更改了,可以同样的方法,防止obj1不被修改,栗子:

var obj1 = { name:'张三' };
var obj2= { age:18 };
var obj3 = Object.assign({},obj1,obj2);
console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj1 === obj3);

结果:
这里写图片描述
方法三:可以采用循环遍历的方法了,这种就稍微麻烦一点了,就不在赘述了,贴一个栗子吧:

var obj1={name:'张三'};
var obj2={age:18};
for(var key in obj2){
    if(obj2.hasOwnProperty(key)===true){        
        obj1[key]=obj2[key];
    }
}
console.log(obj1);

结果:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值