JavaScript最快的方式来复制一个数组
为了在JavaScript中复制数组,
有没有人知道(也许测试过)如果使用速度更快:
切片方法:
var dup_array = original_array.slice();
或For循环:
for(var i = 0, len = original_array.length; i < len; ++i)
dup_array[i] = original_array[i];
更新:(只是为了澄清我自己)我知道这两种方法只做一个浅拷贝 :如果original_array包含对象的引用,对象将不会被克隆,但只有引用将被复制,因此两个数组都会引用相同的对象。 但这不是这个问题的重点。
我只问速度。
至少有5 (!)种方法来克隆数组:
有一个huuuge BENCHMARKS线程,提供以下信息:
对于blink浏览器, slice()
是最快的方法, concat()
有点慢, while loop
慢了2.4倍。
对于其他浏览器而言, while loop
是最快的方法,因为这些浏览器对slice
和concat
没有内部优化。
这在2016年7月仍然如此。
下面是简单的脚本,您可以将它们复制粘贴到浏览器的控制台中并运行多次以查看图片。 他们输出毫秒,越低越好。
while循环
n = 1000*1000;
start = + new Date();
a = Array(n);
b = Array(n);
i = a.length;
while(i--) b[i] = a[i];
console.log(new Date() - start);
片
n = 1000*1000;
start = + new Date();
a = Array(n);
b = a.slice();
console.log(new Date() - start);
请注意,这些方法会克隆Array对象本身,然而数组内容是通过引用复制的,并且不会深入克隆。
origAr == clonedArr //returns false
origAr[0] == clonedArr[0] //returns true
技术上slice
是最快的方法, 但是如果你加它还要快0
开始的索引。
myArray.slice(0);
比速度快,
myArray.slice();
http://jsperf.com/cloning-arrays/3
那么es6的方式呢?
arr2 = [...arr1];
链接地址: http://www.djcxy.com/p/48363.html