2017-02-16 88 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在此代碼感到困惑的部分是,在第一循環的尋訪MYNAME字符串的第一個字符是「A」從文本字符串。當它發現它時(在我們的例子中它會在第8次(從0開始)迭代中找到它),它進入另一個循環,我們說J = 1,所以j得到8的值,只要j這是8不等於名稱字符串的長度+ 8(i)將開始從文本[8]推動字符直到它擊中myName +我的長度。我的問題是在哪裏命中[]陣列它會把字符?它會從命中[0]開始?當它再次找到'A'時,它會繼續從那裏繼續嗎?爲什麼在碰到下一個'A'字符時它不覆蓋命中數組?

+2

的'.push()'函數總是添加到目標陣列的端部。 'hits'數組開始爲空,所以推送的第一個字符成爲第一個條目。之後,'.push()'總是在最後添加。 – Pointy

+0

不清楚!你究竟在尋找什麼。 –

+0

做最後一個循環'k'而不是'i' – zer00ne

回答

0

因爲數組命中[]在循環之外被初始化。第一次循環運行後,數組中已經有內容。當第二個循環運行時,它會將更多元素推送給它。 如果在循環中初始化了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]); 
}