为什么这会产生一个无限循环

Why does this create an infinite loop?

本文关键字:一个 无限循环 为什么      更新时间:2023-09-26

这是我在FreeCodeCamp.com上的一个算法问题:


返回值(第二个参数)在排序后应该插入数组(第一个参数)的最低索引。返回值应该是一个数字。

如果我没有在我的"If语句"中放一个断点,我就会得到一个"潜在的无限循环"警告。为什么呢?我认为如果条件为假,for循环将继续进行下一次迭代。

//

我的解决方案
function getIndexToIns(arr, num) {
  arr.sort(function(a, b) {
    return a - b;
  });
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > num) {
    //This is the code in question
       arr.splice(i, 0, num);
       break;
    }
    else {
      arr.push(num);
    }
  }
  return arr.indexOf(num);
}

一旦你把数字插入到数组中,条件就永远不会为假,因为arr[i]总是第一个让你进入if块的元素——它只是上移了一个索引。

var arr = [500];
var num = 100;
for (var i = 0; i < arr.length; i++) {
    if (arr[i] > num) {                // arr[0] = 500, so we enter the block
       arr.splice(i, 0, num);          // now the array is [100, 500], and the 
    }                                  // for loop is going to move onto arr[1]
                                       // which is still 500... so we'll enter the
                                       // if block again and insert another 100, etc etc.