当前位置:首页 > 开发 > Web前端 > JavaScript > 正文

[JavaScript]javascript对数组进行复制

发表于: 2010-04-29   作者:dinguangx   来源:转载   浏览次数:
摘要: 复制数组: javascript中操作对象与java一样采用引用的方式,所以如果通过obj2 = obj1的方式进行数组复制的时候,无论对obj2还是obj1所做的修改都同时影响两个变量的值,从而引发不愿意看到的后果。下面介绍两种实现简单数组元素复制的方法。 (1) 借用slice()进行数组的复制 slice() 函数可从已有的数组中返回选定的元素。使用语法为: arrObject.
复制数组:
javascript中操作对象与java一样采用引用的方式,所以如果通过obj2 = obj1的方式进行数组复制的时候,无论对obj2还是obj1所做的修改都同时影响两个变量的值,从而引发不愿意看到的后果。下面介绍两种实现简单数组元素复制的方法。
(1) 借用slice()进行数组的复制
slice() 函数可从已有的数组中返回选定的元素。使用语法为:
arrObject.slice(start,end); //start,开始位置;end,结束位置

slice()函数将会返回一个新的数组对象,所以使用slice(0)就可以实现数组的复制.
测试代码:
var  arr = [1,2,3,4];
  var clone = arr.slice(0);
  arr.splice(1,2);//删除从位置1开始的两个元素
  alert("arr:" + arr + "\nclone:" + clone);//arr:[1,4]   clone:[1,2,3,4]

(2) 借用concat()函数进行数组的复制
concat() 用于进行数组的合并。使用语法为:
arrayObject.concat(arrayX,arrayX,......,arrayX)

concat()用于多个数组的合并,但是返回的结果是一个新的数组,而不再引用用于合并的任何一个数组。可以利用它的这个特性来用一个数组连接空数组或直接不传参数完成clone的功能.
测试代码:
var  arr = [1,2,3,4];
var clone = arr.concat();
arr.splice(1,2);//删除从位置1开始的两个元素
alert("arr:" + arr + "\nclone:" + clone);//arr:[1,4]   clone:[1,2,3,4]

但是,以上两种数组复制的操作都不适合对数组中包括复杂数据类型的数据,如果数组中包括复杂数据类型的数据,对这些数据的修改仍然会同时影响复制数组与被复制数组。所以它并不是一个彻底的能实现深层复制的处理思路。
测试代码:
var arr = [1,2,[1,2,3],4];
  var clone = arr.slice(0);
  arr[2].splice(1,1);//删除从位置1开始的两个元素
  alert("arr:" + arr + "\nclone:" + clone);//arr:[1,2,1,3,4]   clone:[1,2,1,3,4]
如果想要实现深层的对象复制,可以采用下面这个通用的实现对象克隆的函数:
来源:http://www.cnblogs.com/birdshome/archive/2005/03/20/122246.html
 Object.prototype.clone = function()
  {
     var objClone;
     if ( this.constructor == Object ) objClone = new this.constructor(); 
     else objClone = new this.constructor(this.valueOf()); 
     for ( var key in this )
     {
         if ( objClone[key] != this[key] )
         { 
             if ( typeof(this[key]) == 'object' )
             { 
                 objClone[key] = this[key].Clone();
             }
             else
             {
                 objClone[key] = this[key];
             }
         }
     }
     objClone.toString = this.toString;
     objClone.valueOf = this.valueOf;
     return objClone; 
  }


[JavaScript]javascript对数组进行复制

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
javascript 三种数组复制方法的性能对比,对于webkit, 使用concat; 其他浏览器, 使用slice. 一. 三种
JavaScript中的数组 Array是JavaScript中常用的类型,并且JavaScript中的数组和其他语言的数组有比
javascript版本,可直接粘贴到chrome控制台下运行, 二维数组方式实现最后是一行一行打印的; 支持顺
添加元素 console.info('------------------add---------------------'); console.info('----------
转化方法--对象或数组都是具有【toLocaleString()】、【toString()】、【valueOf()】方法 1 var box
一:对象   说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,
this是JavaScript中一个比较混乱的地方。其实理解JavaScript中的this也挺简单的 在ECMA 3th中有这样
1.存放形式 1).外部文件导入 2).head中申明 3).标签属性中直接书写 2.数据类型 var修饰:(没有表示
//来自于别人 <html> <head> <title>98</title> </head> <script
JS教程 JavaScript简介 1 JavaScript 是脚本语言 2 JavaScript 是一种轻量级的编程语言。 3 JavaScri
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号