亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有沒有人來解釋一下這些代碼?這節實在看不懂啊

? <script type="text/javascript">

? ? //創建數組

? ? var arr=["*","##","***","&&","****","##*"];

? ? arr[7]="**";

? ??

? ? //刪除數組中非*的項

? ? for(var i=0;i<arr.length;i++){

? ? ? ? if(arr[i]!=undefined){

? ? ? ? ? ? var myarr=arr[i].split("");

? ? ? ? ? ? for(var j=0;j<myarr.length;j++){

? ? ? ? ? ? ? ? if(myarr[j]!='*'){

? ? ? ? ? ? ? ? ? ? arr.splice(i,1);

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }


? ? //按照字符數排序

? ? arr.sort(function(a, b){

? ? ? ? if(a.length>b.length)

? ? ? ? {

? ? ? ? ? ? return 1;

? ? ? ? }

? ? ? ? else if(a.length<b.length)

? ? ? ? {

? ? ? ? ? ? return -1;

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? return 0;

? ? ? ? }

? ? })


? ? //將數組內容輸出,完成達到的效果。

? ? for(var i=0;i<arr.length;i++){

? ? ? ? if(arr[i] != undefined){

? ? ? ? ? ? document.write(arr[i]+'<br />')

? ? ? ? }

? ? }

? ?</script>

正在回答

7 回答

?var arr=['*','##','***','&&','****','##*'];

?arr[7]="**";

document.write(arr[0]+"<br/>") //輸出:*

document.write(arr[7]+"<br/>")//輸出:**

document.write(arr[2]+"<br/>")//輸出:***

document.write(arr[4]+"<br/>")//輸出:****

其實這樣的代碼就可以按要求打印結果,不過樓上的各種回答加上了判斷機制,一是判斷有沒有超出數組長度,二是判斷打印的結果是不是*。

0 回復 有任何疑惑可以回復我~
var?arr?=?['*','##',"***","&&","****","##*"];
?arr[7]?=?"**";
???//先除去arr數組中不是*的元素
?for(var?i=0;i<arr.length;i++){
????if(arr[i]!=undefined){//如果arr[i]不是空值(即未賦值),則使用split函數按參數將字符串切分,返回子串數組;如果參數是"",則將字符串切分成單個字母
????????var?myarr=arr[i].split("");
????????for(var?j=0;j<myarr.length;j++){//檢測myarr是不是全是*
????????????if(myarr[j]!='*'){//如果不是myarr不全是*則刪除
????????????arr.splice(i,1);
????????????i--;//由于每次刪除length的值都會減一,那么則會使每次刪除元素的后一個元素得不到檢測
????????????break;
????????????}
????????}
????}
????else
????????arr.splice(i,1);
???}
//按*得數目對arr進行排序,使用sort函數,首先實現比較函數,以便規定排序規則;
//比較函數可以獨立書寫,也可以寫在sort的括號中
//比較函數:有兩個參數a,b;如果返回值為負數,a排列在b的前面;返回0位置不變;否則排列在b后面
function?regular(a,b){
????if(a.length<b.length)
????????return?-1;
????if(a.length>b.length)
????????return?1;
????else
????????return?0;
}
//上述函數可以改寫為下面的簡寫形式
/*function?regular(a,b){
????return?a.length-b.length;
}*/
arr.sort(regular);
//循環輸出arr
?for(var?j=0;j<arr.length;j++){
????document.write(arr[j]+"<br>");
?}

注釋得應該可以看懂

2 回復 有任何疑惑可以回復我~

樓上正解

0 回復 有任何疑惑可以回復我~

這個代碼其實有一個bug,在刪除數組其中一個元素之后會改變數組的長度,導致for循環出錯

建議在arr.splice(i,1); 與break;中添加一句i--;

讓當前的index減一

假如刪除數組index=3的位置,就再次從3開始下一次判斷

1 回復 有任何疑惑可以回復我~

split 分割字符串返回數組? splice刪除數組制定位置開始指定長度的的的元素

0 回復 有任何疑惑可以回復我~

根本沒有必要這么復雜!我的處理:

document.write(arr[0]+"<br/>") //輸出:*

document.write(arr[7]+"<br/>")//輸出:**

document.write(arr[2]+"<br/>")//輸出:***

document.write(arr[4]+"<br/>")//輸出:****

0 回復 有任何疑惑可以回復我~
#1

風早君418 提問者

我只是想看懂他的原理
2016-07-06 回復 有任何疑惑可以回復我~

我也是懵懵懂懂的,需要自己多看幾遍就理解了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有沒有人來解釋一下這些代碼?這節實在看不懂啊

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號