Array 随机排序(洗牌算法)
原生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;
}