-
function mess(arr){
-
var _floor = Math.floor, _random = Math.random,
-
len = arr.length, i, j, arri,
-
n = _floor(len/2)+1;
-
while( n-- ){
-
i = _floor(_random()*len);
-
j = _floor(_random()*len);
-
if( i!==j ){
-
arri = arr[i];
-
arr[i] = arr[j];
-
arr[j] = arri;
-
}
-
}
-
return arr;
-
}
-
var testa = [1, 2, 3, 4, 5, 6, 7];
-
mess(testa);
-
console.log(testa);
function mess(arr){
var _floor = Math.floor, _random = Math.random,
len = arr.length, i, j, arri,
n = _floor(len/2)+1;
while( n-- ){
i = _floor(_random()*len);
j = _floor(_random()*len);
if( i!==j ){
arri = arr[i];
arr[i] = arr[j];
arr[j] = arri;
}
}
return arr;
}
var testa = [1, 2, 3, 4, 5, 6, 7];
mess(testa);
console.log(testa);
要注意一点的是,这是改变原数组的,不想改变原数组的话请先拷贝原数组:
-
var testa = [1, 2, 3, 4, 5, 6, 7];
-
var newarr = mess( testa.slice(0) );
-
console.log(testa);
-
console.log(newarr);
var testa = [1, 2, 3, 4, 5, 6, 7];
var newarr = mess( testa.slice(0) ); //这里只是浅拷贝数组
console.log(testa);
console.log(newarr);
这个洗牌函数算好么?
接文章第二部分:JavaScript洗牌算法二
(责任编辑:熊猫蜀黍)