2017-02-16 7 views
0

愚かな質問かもしれないが、それは私を混乱させた。文字を押す配列

var text = "Hello Mr Andreas Andreas Kostakis o ala krem Andreas o pianistas o poutsopnikt\o skaraveos o Andreas"; 
 
var myName = "Andreas"; 
 
var hits = []; 
 

 
for (var i = 0; i < text.length; i++){ 
 
    if (myName[0] === text[i]) 
 
    { 
 
     for (var j = i; j < (myName.length + i); j++){ 
 
      hits.push(text[j]);  
 
     } 
 
    } 
 
} 
 
for (var i = 0; i < hits.length; i++) 
 
{ 
 
    document.write(hits[i]); 
 
}

このコードで混乱IAMの部分は、テキスト文字列から「A」であるがmyName文字列の最初の文字のための最初のループの検索です。それが見つかると(この例では、0から始まる)8回目の繰り返しでそれを見つけることになります.J = Iという別のループに入り、jは8の値を取得しています.j 8文字は文字列の長さ+ 8(i)の長さと等しくないので、myName + iの長さに達するまでテキスト[8]から文字をプッシュし始めます。ヒット[0]から始まりますが、 'A'がもう一度見つかると、次の 'A'文字にヒットするとヒット配列を上書きしません。

+2

'.push() '関数は常に、標的配列の末尾に追加します。 'hits'配列は空になるので、プッシュされた最初の文字が最初のエントリになります。その後、 '.push()'は常に最後に追加されます。 – Pointy

+0

明確ではありません!正確にあなたが探しているもの。 –

+0

'i'の代わりに最後のループ' k'を作ります – zer00ne

答えて

0

配列ヒット[]はループ外で初期化されるためです。最初のループが実行された後、配列にはすでにコンテンツが含まれています。 2番目のループが実行されると、それはもっと多くの要素をそのループに押し込むだけです。 ループ内でhits []配列が初期化された場合、コンテンツは上書きされます。

Plunker:https://plnkr.co/edit/1NAkcsMuwVkXvzh4OKJP?p=preview

var text = "Hello Mr Andreas Andreas Kostakis o ala krem Andreas o pianistas o poutsopnikt\o skaraveos o Andreas"; 
var myName = "Andreas"; 
var hits_to_not_overwrite = []; 

for (var i = 0; i < text.length; i++){ 
    if (myName[0] === text[i]) { 
     var hits_to_overwrite = []; 
     for (var j = i; j < (myName.length + i); j++){ 
      hits_to_not_overwrite.push(text[j]);  
      hits_to_overwrite.push(text[j]);  
     } 
    } 
} 

document.write("<p>No overwrite:</p>"); 
for (var i = 0; i < hits_to_not_overwrite.length; i++) { 
    document.write(hits_to_not_overwrite[i]); 
} 

document.write("<p>Overwrite:</p>"); 
for (var i = 0; i < hits_to_overwrite.length; i++) { 
    document.write(hits_to_overwrite[i]); 
}