如何在for循环中剔除满足条件的元素

业务开发过程站常常需要在for循环中将某个元素剔除,按照常规的思路,就是对数组进行一个for循环,然后在循环里面进行if判断,在判断中删除掉指定元素即可。但是由于数组下标的问题,实际情况往往不会像预想的那样顺利运行。如下所示:

var arr = [1, 2, 2, 3, 4, 5];
    for (var i = 0; i < arr.length; i++){
        // 打印数组中的情况,便于跟踪数组中数据的变化
        console.log(i + ' = ' + arr[i]);
        // 删除掉所有为2的元素
        if(arr[i] === 2) {
            arr.splice(i, 1);
        }
    }
    console.log(arr);//[1,2,3,4,5]

  此时需要做如下改动,才能达到以下效果:

var arr = [1, 2, 2, 3, 4, 5];
    for (var i = 0; i < arr.length; i++){
        // 打印数组中的情况,便于跟踪数组中数据的变化
        console.log(i + ' = ' + arr[i]);
        // 删除掉所有为2的元素
        if(arr[i] === 2) {
            arr.splice(i--, 1);
        }
    }
    console.log(arr);

  或者倒序循环,如下:

var arr = [1, 2, 2, 3, 4, 5];
    for (var i = arr.length - 1; i >= 0; i--) {
        // 打印数组中的情况,便于跟踪数组中数据的变化
        console.log(i + ' = ' + arr[i]);
        // 删除掉所有为2的元素
        if(arr[i] === 2) {
            arr.splice(i, 1);
        }
    }
    console.log(arr);

  或者用while代替for循环,如下:

var arr = [1, 2, 2, 3, 4, 5];
    var i = arr.length;
    while(i--) {
        console.log(i + ' = ' + arr[i]);
        if(arr[i] === 2) {
            arr.splice(i, 1);
        }
     }
    console.log(arr);

  

posted @ 2020-11-06 13:55  sct春天  阅读(848)  评论(0)    收藏  举报