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);