2016-10-07 62 views
0

當我運行下面的函數,我得到這個錯誤:「潛在的無限循環」混亂

「錯誤:潛在的無限循環。」

該問題似乎是我在拼接方法中使用的「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'); 
+0

閱讀有關的語法[__'Array#splice'__] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) – Rayon

+0

'array.splice(i,0,「」);'你想要什麼?用空間替換當前項目? – gurvinder372

+1

您的代碼將新元素插入到數組中,這會使'array.length'變大。 – nnnnnn

回答

2

array.splice(i, 0, " ");說,在當前i索引中插入一個新元素。這意味着在i的項目被推高到i + 1。那麼在循環的下一次迭代中,您再次處理同一個項目,從而導致另一個插入等。

你可以增加iif塊內的額外的時間,但我更喜歡循環向後

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

+0

啊哈!謝謝。我錯過的主要原因是當使用我的舊for循環語法時,索引「i」處的當前元素被碰撞了一個事實。 再次感謝! – Edson