Javascript中最有效的数组置乱方法
数组混乱意味着弄乱数组中的所有元素。常见的方法是将数组原生排序方法传递给函数,函数返回随机1或- 1来实现随机数组元素。
复制代码代码如下所示:
Arr.sort(功能(A,B){ return Math.random()>。5 - 1:1;});
这种方法直观,但效率不高。经过我的测试,10000个元素的数组被打乱,和时间约为35ms(Firefox)。
我一直保持着良好的品质,坚持到底,然后寻找一种有效的方法。
复制代码代码如下所示:
如果(!数组。
array.prototype.shuffle =函数(){
为(VaR J,X,I = this.length;我;J = parseInt()Math.random(我)。
返回此;
};
}
Arr.shuffle();
这种方法是Array.prototype添加的功能,称为洗牌-但什么名字并不重要,重要的是他的效率是什么。
以我上面10000个元素的数组来测试它,只需要7, 8毫秒的混沌序列。
测试数组元素10至100000,第一种方法需要500 + MS,和洗牌法大约40ms,和差别很大。
完整的测试代码:
复制代码代码如下所示:
VaR计算= 100000,ARR = { };
对于(var i = 0;5 - 1:1;});
array.prototype.sort.call(ARR,功能(A,B){ return Math.random()>。5 - 1:1;});
document.write(ARR +
');
VaR T1 =新的日期()GetTime();
document.write(摘要);
以下方法/最高效率
如果(!数组。
array.prototype.shuffle =函数(){
为(VaR J,X,I = this.length;我;J = parseInt()Math.random(我)。
返回此;
};
}
var t =新的日期()GetTime();
Arr.shuffle();
document.write('
+是+
');
VaR T1 =新的日期()GetTime();
document.write(摘要);
另外,每个人都注意到了洗牌代码中的for循环,而他并没有得到它的后半部分!它只为(..)而不是{的后面,实际上可以这样写!And the normal execution!这就怪了。我得去博主的花园。