首页 > 代码库 > 程序的优化问题

程序的优化问题

有这样一个问题,有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 newArry15     }16     document.write(Arry=changestr());17 </script>

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

程序的优化问题