js双层for循环,i内部自增,为啥跳过本次循环,不执行后面的代码?

数组去重:来自两层循环检测重复元素法

Array.prototype.distinct = function () {
    var arr = this,
        result = [],
        i,
        j,
        len = arr.length;

    for (i = 0; i < len; i++) {
        for (j = i + 1; j < len; j++) {
            if (arr[i] === arr[j]) {
                j = ++i;//跳到了下个循环,只要后面的值有和当前的值相同的话,当前循环的push语句就不会执行,就跳到下次循环
            }
        }
        result.push(arr[i]);
    }
    return result;
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1];
arra.distinct();   
(function () {
    var i; length = 5;
    for (i = 0; i < length; i++) {
        if (i == 2) {
            ++i;//当i为2的时候,后面的代码是执行的,输出3,然后i加了1,变成了4,那就是当i=3的时候没有执行循环
        }
        console.info("u", i);
    }
})()

第一段代码里面i自增了后,后面的代码就不执行了,跳到下次循环,
而第二段代码,里面i自增了,后面的console还是执行的,这是为啥?

阅读 6.1k
4 个回答

谢邀~

首先说continue;

//这样应该能理解continue了
loop1: for(var i = 0; i < 5; i++){
    console.log("i1: " + i)
    loop2: for(var j = 0; j < 5; j++){
      if(j > 1){
          continue loop1;
      }
      console.log(j);
    }
    console.log("i2: " + i)
}

其次去重;

//去重不用双层循环.
var arr = [1,2,3,3,4,1,1,3,2,2,3,4]
function test(arr){
  var res = [];
  for(var i = 0; i < arr.length; i++){
    if(res.indexOf(arr[i]) > -1){
      continue;
    }
    res.push(arr[i])
  }
  return res;
}

跳出本次循环使用continue;。跳出循环使用break;

操作i并不能跳出本次循环,后面代码还是执行的

楼主为何会有后面不执行的想法,内循环改变了i值,从而才有push操作小于i的长度的情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏