2013-11-03 70 views
0
var p = ["array of words", "i really hate the sun", "i'm TIred"] 

function findword(contents,pattern){ 
    var answer; 
    var idx; 
    var counter = 0; 
    var pat_lc = pattern.toLowerCase(); 
    for (var i = 0; i <= contents.length-1; i++){ 
     var str_lc = contents[i].toLowerCase(); 
     idx = str_lc.indexOf(pat_lc) 
     if (idx >= 0){ 
      answer = i 
     } 
     else{ 
      answer = "-1" 
     } 
    } 
    alert(answer) 
} 
findword(p,"words") 

我試圖找到數組的字符串中的某個字符串的索引,但它只適用於某些字在上面的數組中。例如,在代碼的最後一行,當我選擇搜索「單詞」時,它會分別返回「answer」和「idx」-1的值,當它們分別爲0和9時。但是,當我搜索「累」時,「答案」的值是2,「idx」是4(這是正確的)。爲什麼一些單詞有效並且其他單詞返回-1的值?試圖通過字符串數組搜索用戶輸入的模式 - javascript

+0

爲什麼不使用像'array.filter'這樣的本地函數? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Joren

回答

0

只要找到解決辦法,您應該立即停止。

您的程序只在迭代整個數組時纔會停止。但如果答案不在最後一個元素中呢?然後answer將包含-1

您可以在-1初始化answer繼續你for loop只要i小於content.lengthanswer等於-1http://jsfiddle.net/#&togetherjs=dbVcN8JkKP

+0

如果多於一場比賽會發生什麼?警報不會幫助 – charlietfl

+0

@charlietfl提問者沒有給出關於什麼是正確答案的詳細說明。跟隨我的答案會給所有比賽。哦,它的你=) – Martin

+0

謝謝你,我完全理解現在發生了什麼。 –

1

下面是修改過的工作版本,會發現所有匹配

var p = ["array of words", "i really hate the sun", "i'm TIred"] 

function findword(contents,pattern){ 
    var matches=[]; 
    var idx; 
    var pat_lc = pattern.toLowerCase(); 
    for (var i = 0; i <= contents.length-1; i++){ 
     var str_lc = contents[i].toLowerCase(); 
     idx = str_lc.indexOf(pat_lc) 
     if (idx >= 0){ 
      matches.push({ idx: i, position: idx}) 
     } 
    } 
    return matches 
} 

幾個問題

答案和idx被覆蓋過關的for循環。因此,無論是否找到了比賽......只返回最後一個傳球。我將結果保存到了返回的單獨數組中。您提供的代碼與idx沒有任何關係。

可以測試長度的輸出,看是否存在匹配...不匹配將返回空數組沒有長度

試想想它...不知道你想要的輸出

DEMO

相關問題