js中数组的复制
2016-07-06 16:29
435 查看
导论
在网上翻找了半天,好像没有什么特别的方法,记录一下。首先要明确的是,数组是一种引用,直接用 = 赋值是不行的。function clone0() { var array1 = new Array("1","2","3"); var array2 = array1; array1.length = 0; alert(array2); //啥也没有,array1和array2指向同一个数组 }
方法1
创建一个新数组,逐个复制数组元素。function clone1() { var array1 = new Array("1","2","3"); var len=array1.length; var array2 = new Array(); //仅仅定义var array2;会报错 Uncaught TypeError: Cannot set property '0' of undefined 为什么? for(var i=0;i<len;i++) { array2[i]=array1[i]; //array2.push(array1[i]); 同理 } array1.length = 0; alert(array2); //1,2,3 }
方法2
利用JS的数组操作函数来实现。function clone2() { var array1 = new Array("1","2","3"); var array2 = array1.slice(0); array1.length = 0; alert(array2); //1,2,3 }
同理:
function clone3() { var array1 = new Array("1","2","3"); var array2 = array1.concat(); array1.length = 0; alert(array2);//1,2,3 }
参考:
w3school-slice
w3school-concat
其他
二维数组的复制如何处理?参考:实现JS数组的深拷贝
性能对比
参考:javascript 三种数组复制方法的性能对比
反正大意就是自己写一个循环的方法很辣鸡。
push和concat的区别
push 的定义是:向数组的末尾添加一个或更多元素,并返回新的长度。该方法会改变数组的长度。
concat 的定义是:连接两个或更多的数组,并返回结果。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var a = [1,2]; alert(a.concat(3,4));//1,2,3,4 alert(a.push(3,4));//4
相关文章推荐
- js如何取<span>啊啊<a>拉拉</a><span>中<span>的文本不包括<a>标签的?
- Bzoj1823:[JSOI2010]满汉全席:2-sat
- js判断滚动条是否已到页面最底部或顶部实例-拓展(逐渐-自动下滑滚动)
- JSBinding / About 2048 sample
- js判断滚动条是否已到页面最底部或顶部实例
- JavaScript 字符串方法大全
- JS数据类型&&typeof&&其他
- JavaScript基础知识
- zepto源码研究 - zepto.js (zepto.init)
- JS中函数名后面的括号加与不加的区别和作用?
- 1.3 将非标准日期转换成标准javascript日期 P27
- zepto源码研究 - zepto.js - 1
- ajax异步从前台JS传值到后台的几种方法,多个参数
- js深拷贝和浅拷贝
- js中Window 对象及其的方法
- JavaScript——一些用法的Mark
- 浏览器中开发人员工具快速找到dom元素绑定那些JS事件
- json 解析
- js 程序执行与顺序实现详解
- JVM JSTAT命令的用法和参数讲解