2017-08-20 9 views
-2
var arrayLength = splitData.length; 

for(var i=0; i<arrayLength; i++){ 
    if(splitData[i]== '----------------\r\n#NOTES:\r\n'){ 
    console.log("Notes section found..."); 
    noteSection = true; 
    } 

    else if(i==1){ 
    var tempArray = splitData[i]; 
    var titleData = tempArray; 
    titleBox = titleData.split("\r\n"); 
    for(var i=0; i<titleBox.length; i++){ 
     var bpmBox = titleBox[i]; 
     if(bpmBox.indexOf("BPMS") >= 0){ 
     var bpmBoxSplit = bpmBox.split("="); 
     BPM = parseInt(bpmBoxSplit[1]); 
     console.log("BPM found: " + BPM); 
     } 
    } 
    } 

を変更せずにをループてる配列はだから私は、配列を反復処理は、特定の文字列を検索することをループの配列とがあります。Javascript-分割私はループ配列

'----------------\r\n#NOTES:\r\n' 

しかし、何らかの理由でmy else ifステートメントにarrayLengthを変更しているコードがあり、ループが必要な文字列をまっすぐにスキップしてしまいます。

var titleData = splitData[i]; 
titleBox = titleData.split("\r\n"); 

このコードは大したことではありませんが、私はそれを回避する方法や方法を理解できていません。私はtitleData.split( "\ r \ n")を実行したときに、arrayLengthで混乱していると仮定します。なぜなら、それらは両方とも同じ配列を参照しているからです。しかし、私は再び、なぜこれが起こるか、またはそれを防ぐ方法を知っている完全に理解していない。

基本的には、私が現在ループしているのと同じ配列で、元のものを変更したり変更したりする必要はありません。私は新しい変数を作ることがこれを達成するのに十分であると思ったが、私はそうは思わない。なぜなら、私が1つの変数に行うことは、他の変数に影響するように思われるからです。

ご協力いただければ幸いです。

+0

両方のループで同じカウンタ変数名「i」を使用しているので、ループの1つに異なるカウンタ変数名を使用します。あるいは、 'var'の代わりに' let'を使ってそれらを定義して、スコープをブロックしても構いませんが、混乱を防ぐために別の名前を使用します –

答えて

1

2つのネストされたforループがありますが、どちらも同じ変数iを使用することはできません。内部ループでは、外部ループのi変数を再定義しています。これは、もちろん、外部ループの順序を崩してしまいます。

解決策は簡単です。内部ループに異なる変数名を使用します(例:i2 oder ii)。