有这样一个问题,有a,b,c,d四个字母,每当刷新页面时会以随机的顺序出现,比如a,d,b,c和b,d,c,a。

我当时的解决方案为:

 1 <script type="text/javascript">
 2     var str1;
 3     var str=[];
 4     var flag1=true;
 5     var flag2=true;
 6     var flag3=true;
 7     var flag4=true;
 8     do{
 9         var num=parseInt(Math.round(Math.random()*(4-1))+1);
10         if(num==1&&flag1){
11             str[str.length]="a";
12             flag1=false;
13         }else if(num==2&&flag2){
14             str[str.length]="b";
15             flag2=false;
16         }else if(num==3&&flag3){
17             str[str.length]="c";
18             flag3=false;
19         }else if(num==4&&flag4){
20             str[str.length]="d";
21             flag4=false;
22         }
23     }while(flag1||flag2||flag3||flag4)
24     str1=str[0]+str[1]+str[2]+str[3];
25     document.write(str1);
26 </script>

不过这样写有着很明显的弊端,那就是下次如果想换一些字母进行输出时,必须将程序进行一次大的更改才能继续进行应用,这样做不利于重复使用

下面这种方法就很好的解决了这个问题,当想再次调用时,只需将数组arr中的值进行更改就可以了

 1 <script type="text/javascript">
 2     var arr=["a","b","c","d"];
 3     function changestr(){
 4         var newArry=[];
 5         var temp=[];//新创建的两个数组
 6         for(var p in arr){
 7             temp[p]=arr[p];//将原本数组中的值复制给重新定义的数组
 8         }
 9         for(var i=0;i<arr.length;i++){
10             var random=Math.round(Math.random()*(temp.length-1));//产生0~temp数组长度-1的值
11             newArry[i]=temp[random];//将temp数组中随机出来的数组值赋给新数组
12             temp.splice(random,1);//删除赋给新数组的值,temp数组的长度减一,直到temp中没有值为止
13         }
14         return newArry
15     }
16     document.write(Arry=changestr());
17 </script>

在我看来,真正好的函数必须做到可重复使用,模块化,和具有良好的封装性。