【问题标题】:"Potential Infinite Loop" Confusion“潜在无限循环”的困惑
【发布时间】:2017-02-16 01:04:00
【问题描述】:

当我运行以下函数时,出现此错误:

“错误:潜在的无限循环。”

问题似乎是我在拼接方法中使用的“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的语法
  • array.splice(i, 0, " "); 的目的是什么,你想用空格替换当前项目吗?
  • 您的代码将新元素插入到数组中,这使得array.length 更大。
  • @nnnnnn 啊,谢谢,我会继续进行更改,看看错误是否消失。

标签: javascript arrays for-loop infinite-loop array-splice


【解决方案1】:

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

您可以在if 块内增加i 一个额外的时间,但我更喜欢循环向后

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'));

【讨论】:

  • 啊哈!谢谢。我错过的主要事情是,当使用我的旧 for 循环语法时,索引“i”处的当前元素会增加一个。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多