"Potential Infinite Loop" 混乱

"Potential Infinite Loop" Confusion

当我运行下面的函数时,我得到这个错误:

"Error: Potential infinite loop."

问题似乎是我在 splice 方法中使用的“0”,因为当我将它更改为任何其他数字 (1 - 9) 时,我没有收到此错误。

我不确定这将如何创建一个无限循环。

我在拼接方法中使用的“0”是否与 "i" 之类的东西混淆了?

非常感谢帮助,谢谢。

function spinalCase(str) {
  var array = str.split("");
  for (i = 0; i < array.length; i++) {
    if (array[i] !== array[i].toLowerCase()) {
      array.splice(i, 0, " ");
    }
  }
  return array;
}
spinalCase('AllThe-small Things');

array.splice(i, 0, " "); 表示在当前 i 索引处插入一个新元素。这意味着位于 i 的项目被推到 i + 1。因此,在循环的下一次迭代中,您将再次处理同一个项目,从而导致另一个插入等,直到永远。

您可以在 if 块内增加 i 额外的时间,但我更喜欢循环 backwards:

function spinalCase(str) {
  var array = str.split("");
  for (i = array.length - 1; i >= 0; i--) {
    if (array[i] !== array[i].toLowerCase()) {
      array.splice(i, 0, " ");
    }
  }
  return array;
}
console.log(spinalCase('AllThe-small Things'));