JavaScript中【数组的合并】和【对象的合并 (浅克隆,深克隆)】
2018-02-25 23:23
726 查看
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 对象的深拷贝和浅拷贝
jQuery例子:浅拷贝
//浅拷贝 var obj1 = { a : 1, b : 2 }; var obj2 = { c : 3, d : 6 }; $.extend(false , obj1 , obj2); console.log(obj1); obj1.a = 666; //obj2重新赋值 console.log(obj1.a); //666 obj1.b仅拷贝了对象的指针,所以受原obj2的影响
深拷贝
//深拷贝 var obj1 = { a : 1, b : 2 }; var obj2 = { c : 3, d : 6 }; $.extend(true, obj1 , obj2); //true代表深度拷贝 console.log(obj1); //{a: 1, b: 2, c: 3, d: 6} obj1.a = 666; console.log(obj1.a); //1 obj1拷贝了obj2的所有属性以及值,并不受obj2的影响
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中数组的合并和对象的合并
相关文章推荐
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
- 详解JavaScript中的数组合并方法和对象合并方法
- 从零开始学_JavaScript_系列(24)——查看对象属性,合并数组
- Javascript基类对象原型中有数组的情况
- JavaScript:类似数组的对象
- JavaScript学习总结(二)数组和对象部分
- JavaScript的对象深度克隆
- 从零开始学_JavaScript_系列(15)——js系列<4>(数值、字符串、对象、数组、函数、日期的基本方法)
- JavaScript数组和对象的复制
- 合并JavaScript数组的N种方法
- JavaScript之克隆与数组
- JavaScript中Date,Math,Global,Number等对象的浅析,Array数组对象的解析
- 对象数组集合中对象数组比较合并
- 【自学笔记】 原生JavaScript判断一个变量是否为数组,利用原型对象
- javaScript的对象和数组
- JavaScript基础(基本语法:变量、语句、数组、函数、对象、全局方法以及js与java不同,js与html关联)
- JavaScript:数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并
- javascript学习笔记二:javascript中的数组对象和json对象
- JavaScript中数组对象的那些自带方法介绍
- javascript清空数组与clone对象