2013-11-03 65 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

相关问题