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