原生Sort
function foo(arr){
let clonrArr = arr.concat();
clonrArr = clonrArr.sort(function(){
return Math.random() - .5;
})
return clonrArr;
}
洗牌算法:
// 交換了隨機的位置,效率上是這幾種算法中最快的一個
function foo(arr){ let clonrArr = arr.concat(), len = clonrArr.length, index = null; for(let i= 0; i < len; i++){ index = Math.floor( Math.random() * clonrArr.length ); [clonrArr[index], clonrArr[i]] = [clonrArr[i], clonrArr[index]]; } // 返回結果 return clonrArr; }
迭代算法
function foo(arr){
let clonrArr = arr.concat(),
len = clonrArr.length,
index = null,
result = [];
for(let i= 0; i < len; i++){
//得到隨機的數組索引
index = Math.floor( Math.random() * clonrArr.length );
// result.push(clonrArr.splice(index,1)[0]);
result = result.concat(clonrArr.splice(index,1));
}
// 返回結果
return result;
}
遞歸
function foo(arr){
let clonrArr = arr.concat(),
result = [],
index = null;
function fn(){
// 遞歸結束條件
if(!clonrArr.length) return;
//得到隨機的數組索引
index = Math.floor( Math.random() * clonrArr.length );
// result.push(clonrArr.splice(index,1)[0]);
result = result.concat(clonrArr.splice(index,1));
// 遞歸調用
fn();
}
// 調用函數
fn();
// 返回結果
return result;
}