对数组元素打乱输出(不重复随机串)

回顾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