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!这就怪了。我得去博主的花园。