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

数组和对象的拷贝方式

作者: 追风的云月 | 来源:发表于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]
    

    相关文章

      网友评论

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

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