为什么在一个实例中跳过此js循环?

撤消技术

我有一个嵌套循环,大多数情况下都可以使用,但是在特定情况下,它根本无法运行。

这是失败的值: 1, 3-5, 7-10, 22

JS代码:

document.getElementById("myButton").addEventListener("click", function () {
    document.getElementById("msg").innerHTML = "";

    // Get the short list
    var list = document.getElementById("myIn").value;
    var sublists = list.split(", ");

    var Range = [];
    var result = "";
    var start;    // for the nested loop
    var end;      // for the nested loop

    for (var i = 0; i < sublists.length; i++) {
        Range = sublists[i].split("-");
        start = Range[0];
        end = Range[Range.length-1];

        Log("Range: " + Range);  // Shows which parts of the sublist the program sees

        for (var j = start; j <= end; j++) {
            result = result + j + ",";
            Log("Result in loop: " + result);  // Show which parts make it inside the loop
        }
    }

    result = result.slice(0, -1); // Takes off the extra comma at the end

    Log("Result: " + result);  // Shows result
});

输入失败值时,结果如下:

Range: 1
Result in loop: 1,
Range: 3,5
Result in loop: 1,3,
Result in loop: 1,3,4,
Result in loop: 1,3,4,5,
Range: 7,10   <--- Never goes inside the loop
Range: 22
Result in loop: 1,3,4,5,22,
Result: 1,3,4,5,22

我不知道为什么跳过7-10部分。任何帮助或解释,我们将不胜感激。

这是FIDDLE

格伦迪

parseInt在这里使用整数时需要使用

start = parseInt(Range[0],10);
end = parseInt(Range[Range.length-1],10);

splittng后,您将获得带有字符串的数组,并在尝试将“ 7”“ 10”进行比较时,将其与字符串进行比较,而“ 7”始终大于“ 10”,因为“ 7”的字符代码大于“ 1”的字符代码(“ 10”中的第一个字符)

为了转换为数字,您还可以使用下一个函数:NumberparseIntparseFloat

document.getElementById("myButton").addEventListener("click", function() {
  document.getElementById("msg").innerHTML = "";

  // Get the short list
  var list = document.getElementById("myIn").value;
  var sublists = list.split(", ");

  var Range = [];
  var result = "";
  var start; // for the nested loop
  var end; // for the nested loop

  for (var i = 0; i < sublists.length; i++) {
    Range = sublists[i].split("-");
    start = parseInt(Range[0], 10);
    end = parseInt(Range[Range.length - 1], 10);
    Log("Range: " + Range); // Shows which parts of the sublist the program sees

    for (var j = start; j <= end; j++) {
      result = result + j + ",";
      Log("Result in loop: " + result); // Show which parts make it inside the loop
    }
  }

  result = result.slice(0, -1); // Takes off the extra comma at the end

  Log("Result: " + result); // Shows result
});

// Log is my imitation of console.log()
function Log(stuff) {
  var msg = document.getElementById("msg");

  var newDiv = document.createElement("div");
  newDiv.innerHTML = stuff;

  msg.appendChild(newDiv);
}
<p>Try this value in the input: 1, 3-5, 7-10, 22</p>
<input id="myIn" type="text" />
<button id="myButton" type="button">Go</button>
<p id="msg"></p>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的for循环会跳过数组中的最后一个值?

为什么foreach从数组中跳过一个元素

为什么for循环会更改for循环中的列表后跳过第一个元素?

为什么我的程序在For循环的第一个循环后跳过cin>>?

如何跳过循环的第一个实例中的前三个元素

为什么我的循环每隔一个列表条目就会跳过一次?

为什么 for 循环跳过第一个 i++

知道为什么无法从另一个 GCP 实例访问此端口吗?

为什么此循环一次不处理一个文件?

为什么此PHP分配在循环中始终输出第一个值?

为什么When.js会答应。然后跳过一个函数?

为什么dropdrop和takewhile跳过最后一个?

为什么 yytext 跳过 YACC 中的第一个输入?

当我调用一个跳过链表中节点的函数时,为什么输出是一个空列表?

为什么可以在Scala中实例化多个特征,而不能实例化一个特征?

为什么此代码在C ++中的第一个循环中省略了第二个单词

为什么此Shell脚本仅对一个实例有效,而对另一个实例无效?

为什么使用扫描仪要求用户输入的 Java while 循环会跳过第一个输入

为什么我的程序自动为scanf取值,导致程序自动循环并跳过下一个scanf?

为什么此Scala代码在一个线程中执行两个Future?

为什么在下面的node js程序中S函数内的第一个for循环无限运行?

为什么此函数只返回应为5的数组中的一个(第一个)值?

为什么此诺言用链中的第一个项目而不是最后一个解决?

为什么不在php中显示此数组的第一个元素?

为什么此FSM仅在一个状态转换中成功?

为什么在最后一个匹配中此正则表达式空格?

为什么此按钮与RelativeLayout中的另一个按钮无法正确对齐?

为什么此代码仅显示数组中的最后一个元素?

为什么不处理此管道中第一个命令的stdout?