javascript - js双层for循环,i内部自增,为啥跳过本次循环,不执行后面的代码?
伊谢尔伦
伊谢尔伦 2017-04-11 12:28:31
[JavaScript讨论组]

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

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还是执行的,这是为啥?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

谢邀~

首先说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的长度的情况。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号