zoukankan      html  css  js  c++  java
  • 数组和对象的复制

    1、数组的复制

    a)利用数组的concat()方法

    var a=[1,2,3];
    var b=a.concat();
    console.log(b);//[1,2,3]

    a[3]=5;
    console.log(a);//[1,2,3,5]
    console.log(b);//[1,2,3]

    b)利用数组的slice()方法

    var a=[1,2,3]
    var b=a.slice(0);
    console.log(b);//[1,2,3]

    a[3]=5;
    console.log(a);//[1,2,3,5]
    console.log(b);//[1,2,3]

    附:arrayObject.slice(start,end)的方法说明

    参数 描述
    start                               必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

     返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。不会改变原数组。

    c)利用jquery中的map方法

    var a=[1,2,3]
    var b=$.map(a,function(n){return n})
    console.log(b);//[1,2,3]
    a[3]=5;
    console.log(a);//[1,2,3,5]
    console.log(b);//[1,2,3]

    d)如果数组的元素中存在对象,那么需要深度复制

    //第二层为对象
    var
    a=[{one:1,two:2},{three:3}]
    var b=$map(a,function(obj){
      return $.extend(true,{},obj);//对象需要深度复制
    })

    //第二层为数组(需要以后补充)

    2、对象的复制

    a)利用jquery,对象的浅度复制(只复制顶层)

    var  obj={a:1,b:2,c:3}
    var obj_q=$.extend({},obj);
    
    console.log(obj_q);//{a:1,b:2,c:3}
    
    obj.a=45;
    console.log(obj);//{a:1,b:2,c:3}
    console.log(obj_q);//{a:45,b:2,c:3}

    b)利用jquery,对象的深度复制

    若仍然用浅度复制,结果如下:

    //第二层为对象
    var
    obj={a:1,b:{e:45},c:3} var obj_q=$.extend({},obj); console.log(obj_q);//{a:1,b:{e:50},c:3} 没错,此时obj_q.b.e已经变成了50
    obj.a=2; obj.b.e=50; console.log(obj);//{a:2,b:{e:50},c:3} console.log(obj_q);//{a:1,b:{e:50},c:3}


    //第二层为数组
    var obj={a:1,b:[1,2,3],c:8}
    var obj_q=$.extend({},obj);

    console.log(obj_q);//{a:1,b:[12,2,3],c:8}

    obj.a=2
    obj.b[0]=12;
    console.log(obj);//{a:2,b:[12,2,3],c:8}
    console.log(obj_q);//{a:1,b:[12,2,3]}

    深度复制如下:

    //第二层为对象
    var
    obj={a:1,b:{e:45},c:3} var obj_q=$.extend(ture,{},obj);//第一个参数为true,不要忘了 console.log(obj_q);//{a:1,b:{e:45},c:3} obj.a=2; obj.b.e=50; console.log(obj);//{a:2,b:{e:50},c:3} console.log(obj_q);//{a:1,b:{e:45},c:3}


    //第二层为数组
    var obj={a:1,b:[1,2,3],c:8}
    var obj_q=$.extend(true,{},obj);

    console.log(obj_q);//{a:1,b:[1,2,3],c:8}

    obj.a=2
    obj.b[0]=12;
    console.log(obj);//{a:2,b:[12,2,3],c:8}
    console.log(obj_q);//{a:1,b:[1,2,3]}
     
  • 相关阅读:
    《剑指offer》Q01-12 (牛客10.11)
    北京,我来了
    pods的好处
    iOS那些你从未使用过的属性方法
    重构一个运行超过10年的老项目
    C#泛型
    认真思考创建对象的几种方式
    2014年终总结
    前端优化:AMDclean去除requirejs
    webstorm常用快捷键及插件
  • 原文地址:https://www.cnblogs.com/yddlvo/p/5976699.html
Copyright © 2011-2022 走看看