javascript: Array的splice()索引變化

splice(index,delNum,add1,add2...)Array的一個很好用的方法,能夠從index值位置開始刪除delNum個元素,而後加上add1,add2...;使用該方法在循環遍歷中對數組進行修改很好用,可是有個很嚴峻的問題須要慎重對待,就是————它會改變插入位置之後的值的index。因而咱們先來看看這樣的問題:javascript


1.給出一個數組,去掉數組中重複的元素:


function deleteSameNumber(list){ for(var i = 0;i<list.length; i++){ for(var j = i+1;j<list.length;j++){ if(list[i] == list[j]){ list.splice(j,1); //這裏list[j]被刪除,本來的list[j+1]如今變爲list[j](new),而循環繼續則會j++,致使list[j](new)被跳過,所以結果是錯誤的。 j-=1; //因此這裏應該把j減一,防止忽略list[i](new) } } } return list; } var list=[1,2,3,4,5,6,7,8,9,9,9,9,9,9,7,7,7,8,8,1]; deleteSameNumber(list);

固然,咱們能夠直接使用delete防止改變index:java


//刪除數組中相同的元素 function deleteSameNumber(list){ for(var i = 0,len = list.length; i<len;i++){ for(var j = i+1;j<len;j++){ if(list[i] == list[j]){ delete list[j]; //找到跟list[i]相同的元素就將其刪掉,index不會變,但會留下undefined。 } } } var newlist = list.filter(function(v){return v != undefined;});//過濾掉undefined的值。 return newlist; } var list=[1,2,3,4,5,6,7,8,9,9,8,7,6,5,6,7,6,5,7,4,3,3,4,5]; deleteSameNumber(list);

2.算出必定數值內的全部 質數 :

//計算質數
function prime(num){
    var list = [];
    for(var i = 2; i <= num; i++){ list.push(i);}

    for(var i = 0; i < list.length; i++){
        for(var j = 2; j < list[i]; j++){
            if(list[i] % j == 0){
                list.splice(i,1);    //如1所說,這裏會致使本來的list[i+1]變成list[i](new),至關於對下一個數進行計算,但j確實使用上次遺留下來的值而且+1。不過因爲計算質數的特殊性,j雖然不是從2開始但也能夠判斷該數是否有因子。但爲了嚴謹,必須考慮index變化的影響。

                j = 1;    //把j從新初始化,以便對list[i](new)進行判斷
            }
        }    
    }
    return list;
}
prime(50);
相關文章
相關標籤/搜索