有这样一个问题,有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>
在我看来,真正好的函数必须做到可重复使用,模块化,和具有良好的封装性。