javascript: Array的splice()索引变化

splice(index,delNum,add1,add2...)Array的一个很好用的要领,能够从index值位置最先删除delNum个元素,然后加上add1,add2…;运用该要领在轮回遍历中对数组举行修正很好用,但是有个很严重的题目须要慎重对待,就是————它会转变插进去位置今后的值的index。因而我们先来看看如许的题目:

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:


//删除数组中雷同的元素 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);
    原文作者:Enm
    原文地址: https://segmentfault.com/a/1190000000587668
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞