2016-10-07 14 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にプッシュされます。それで、ループの次の反復で、同じアイテムをもう一度処理して、別の挿入などを永遠にもたらします。

あなたは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'));

+0

Aha!ありがとう。私が見逃した主な事は、私の古いfor-loop構文を使うと、インデックス "i"の現在の要素が1つ上に上がってしまうという事実でした。 ありがとうございました! – Edson

関連する問題