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」の値がそれぞれ 0 と 9 になるはずのときに -1 が返されます。しかし、「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 に答える