回顾2014的一个笔试题
Q:对一个数组(如[1,2,3,4,5])的元素顺序打乱输出,到要求100次内不重复
我当时的思路是Math.random()随机打乱+闭包函数保存已随机过的数组键拼接字符串用于唯一判断
但回来想保存值序列不更好么,另查了大神的打乱数组方式,综合一下,和大家分享
A:
<script>
function random(a, b){
//用于打乱数组的排序函数
return Math.random()>.5 ? -1 : 1;
}
//闭包函数
var uniqueArr=(function(uniqueStr){
var arr=[];
return function(uniqueStr){
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]==uniqueStr){
return false;
}
}
arr.push(uniqueStr);
return arr;
};
})(null);
//打乱数组函数
function randomSort(arr){
var res=arr.sort(random);//打乱的数组
var keys=res.join('');//数组值串
if(un=uniqueArr(keys)){//不重复
//console.log(un,res);//测试用
return res;
}else{
return randomSort(arr);
}
}
//测试一下
var arr = [1, 2, 3, 4, 5];
randomSort(arr);
randomSort(arr);
randomSort(arr);
randomSort(arr);
randomSort(arr);
</script>
翻出来放这里,其实也是希望能够抛砖引玉,希望大家提点改进!
如有疑问,请文末留言交流或邮件:newbvirgil@gmail.com 本文链接 : https://newbmiao.github.io/2015/02/28/random-element-of-array-js.html