美文网首页
数组和对象的拷贝方式

数组和对象的拷贝方式

作者: 追风的云月 | 来源:发表于2018-11-23 14:37 被阅读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]

相关文章

  • 数组和对象的拷贝方式

    这周在项目中,运用JSON.stringify和JSON.parse进行对象拷贝,在数据过大的时候引起了浏览器调试...

  • JavaScript复制数组方式

    浅拷贝 这种数组拷贝方式就是浅拷贝,因为JavaScript存储对象都是存地址的,所以浅复制会导致 arr1 和 ...

  • 深拷贝和浅拷贝

    1. 深拷贝和浅拷贝 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用...

  • js深拷贝和浅拷贝区别

    浅拷贝和深拷贝的区别 1.浅拷贝:将源对象或者原数组的引用 ```直接赋给``` 新对象/新数组 ,新对象/新...

  • Javascript中的深拷贝

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 //使用递归的方式实现数组、对象的深拷贝 functi...

  • 数组浅拷贝和深拷贝

    1.浅拷贝 适用于维度是一维数组,多维数组由于(数组和对象是引用类型的)(常用方法) 2.深拷贝 适用于对象和...

  • pandas和Series使用

    Series 由数组和列表创建Series是一个浅拷贝(只拷贝引用地址,不拷贝对象本身)对象数值变化,数组也变 f...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • Javascript深拷贝

    什么是深拷贝 创建一个新的对象或数组时,将原对象/数组的“值”拷贝,而不是“引用”。 深拷贝 数组拷贝不存在多层嵌...

  • 深浅拷贝

    浅拷贝将原对象/原数组的引用直接赋值给新对象/新数组,新对象/新数组只是原对象/原数组的一个引用。 深拷贝将原对象...

网友评论

      本文标题:数组和对象的拷贝方式

      本文链接:https://www.haomeiwen.com/subject/zyejqqtx.html