试图在字符串数组中搜索用户输入的模式--javascript

时间:2013-11-03 22:19:53

标签: javascript arrays string loops indexing

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的值?

2 个答案:

答案 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

答案 1 :(得分:0)

一旦找到解决方案,就应该停止。

只有在遍历整个数组时,程序才会停止。但如果答案不是最后一个元素呢?然后answer将包含-1

您可以answer初始化-1并继续for loop,只要i小于content.lengthanswer等于-1http://jsfiddle.net/#&togetherjs=dbVcN8JkKP