数组和对象的拷贝方式
2018-11-23 本文已影响0人
追风的云月
这周在项目中,运用JSON.stringify和JSON.parse进行对象拷贝,在数据过大的时候引起了浏览器调试工具的内存溢出,暂时还没搜到这个问题的解决方案,但是先复习一下数据和对象这两种引用类型的拷贝。
首先数组和对象一样,是一个引用类型,如果对它进行复制,只是复制了其指针。
var a = [1,2,3];
var b = a;
a.push(1);
console.log(b)//[1,2,3,1]
如果改变了a指向的数组,b因为引用的是相同的数组自然也受到同样的影响。这种数组拷贝被称为浅拷贝。
数据深拷贝的方法
利用for循环
var arr1 = [1,2,3,4,5];
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
arr2.push(arr1[i])
}
concat 方法
用于连接多个数组组成一个新的数组的方法。用原数组连接一个空数组即可返回一个没有改变的新数组。
var arr1 = [1,2,3,4,5];
var arr2 = arr1.concat();
slice方法
用于将原数组的指定部分分割成新的数组返回,那么设置分隔全部就会返回一个相同的新数组。
var arr1 = [1,2,3,4,5];
var arr2 = arr1.slice(0);
ES6扩展运算符
var arr1 = [1,2,3,4,5]
var arr2 = [...arr1]
对象深拷贝的方法
利用for循环
var obj1= {
name:"lynn",
age:"26"
};
var obj2= {};
for (var key in obj1) {
obj2[key]=obj1[key]
}
利用JSON
var obj1= {
name:"lynn",
age:"26"
};
var obj2= JSON.parse(JSON.stringify(obj1))
ES6扩展运算符
var obj1= {
name:"lynn",
age:"26"
};
var obj2= [...obj1]