知识 分享 互助 懒人建站

    懒人建站专注于网页素材下载,提供网站模板、网页设计、ps素材、图片素材等,服务于【个人站长】【网页设计师】和【web开发从业者】的代码素材与设计素材网站。

    懒人建站提供网页素材下载、网站模板
    知识 分享 互助!

    js数组复制和js对象复制以及深度复制

    作者:佳明妈 来源:web前端开发 2016-10-05 人气:
    js数组或者js对象,是引用类型,不能直接使用 = 复制数据,js数组和js对象如果使用 = 复制,这时候改变一边另外一边就随之改变,js数组的复制我们可以采用如下方式实现:
    js数组或者js对象,是引用类型,不能直接使用 = 复制数据,js数组和js对象如果使用 = 复制,这时候改变一边另外一边就随之改变,js数组的复制我们可以采用如下方式实现:

    利用slice复制数组

    arrayObject.slice(start,end)这个方法返回新数组,而省略end参数的话,将截取start到结束位置。于是就有了:数组.slice(0); 复制数组的方法,如下:
    var a = [0,1,2,3,4];
    var aCopy = a.slice(0);
     
    如果不是标准的数组,而是dom节点这种类数组是不能直接使用数组的slice方法,于是使用如下方法间接使用slice方法,如下:
     
    var a = document.getElementsByTagName("a");
    var copy = Array.prototype.slice.call(a,0);

    利用for循环复制js数组,如下:

    var a= [1,2,3];
    var b = [];
    for(var i=0;i<a.length;i++){
      b.push(a[i])
    };
    

    注意:此法只是对简单的数组有效,如果是类似 [1,2,3,{a:1},5] 这种里面有对象的还是不可以完全适用,因为里面的对象仍然是引用类型,并没有复制成功。

    实现数组或者对象的深度复制deepClone

    function type(obj) {
      var toString = Object.prototype.toString;
      var map = {
        '[object Boolean]' : 'boolean', 
        '[object Number]'  : 'number', 
        '[object String]'  : 'string', 
        '[object Function]' : 'function', 
        '[object Array]'  : 'array', 
        '[object Date]'   : 'date', 
        '[object RegExp]'  : 'regExp', 
        '[object Undefined]': 'undefined',
        '[object Null]'   : 'null', 
        '[object Object]'  : 'object'
      };
    
    if(obj instanceof Element) {
        return 'element';
      }
    return map[toString.call(obj)]; } function deepClone(data) { var t = type(data), o, i, ni; if(t === 'array') { o = []; }else if( t === 'object') { o = {}; }else { return data; } if(t === 'array') { for (i = 0, ni = data.length; i < ni; i++) { o.push(deepClone(data[i])); } return o; }else if( t === 'object') { for( i in data) { o[i] = deepClone(data[i]); } return o; } }
    ↓ 查看全文

    js数组复制和js对象复制以及深度复制由懒人建站收集整理,您可以自由传播,请主动带上本文链接

    懒人建站就是免费分享,觉得有用就多来支持一下,没有能帮到您,懒人也只能表示遗憾,希望有一天能帮到您。

    js数组复制和js对象复制以及深度复制-最新评论