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")

我试图在字符串数组中找到某个单词的数组索引,但是它仅适用于上面数组中的某些单词。例如,在代码的最后一行,当我选择搜索“words”时,它会返回“answer”和“idx”的值 -1,而应该分别为 0 和 9。但是,当我搜索“tired”时,“answer”的值为 2,“idx”为 4(这是正确的)。为什么有些词有效,而另一些则返回 -1 的值?

4

2 回答 2

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
}

几个问题

answer 和 idx 会在for循环通过时被覆盖。因此,无论是否找到匹配项...仅返回最后一次传递。我将结果保存到返回的单独数组中。您提供的代码对idx.

可以测试输出的长度以查看是否存在匹配项...没有匹配项将返回没有长度的空数组

想想看……不确定你想要什么输出

DEMO

于 2013-11-03T22:33:20.827 回答
0

一旦找到解决方案,您应该立即停止。

您的程序仅在迭代整个数组时才会停止。但是,如果答案不在最后一个元素中呢?然后answer将包含-1.

只要小于等于,您就可以初始化answer-1继续:http : //jsfiddle.net/#&togetherjs=dbVcN8JkKPfor loopicontent.lengthanswer-1

于 2013-11-03T22:32:16.307 回答