0

次のコードを実行して、Eric という単語のアルファベットを表示する関連出力を取得しました。

/*jshint multistr:true */

text = "My name is Eric. Eric lives in New York";
var myName = "Eric";
var hits = [];

for (var i=0; i < text.length; i++) {
    if (text[i] == "E" ) {
        for (var j=i; j < (myName.length + i); j++) {
            hits.push(text[j]);
        }
    }
}
if (hits.length === 0) {
    console.log("Your name wasn't found!");
} else {
         console.log(hits);
}

[ 'E', 'r', 'i', 'c', 'E', 'r', 'i', 'c' ]という目的の出力を得ることができます

ただし、コードの 8 行目 に「l」を入力すると、次の出力が得られます: [ 'l', 'i', 'v', 'e', 's', ' ', 'i' ]

私の理解では、コードは「あなたの名前が見つかりませんでした!」というメッセージを返すはずです。.

代わりに、文字lの後の文字を処理し、それを出力として返します。

文字列Eric内の文字のみが検索され、出力として返され、他の文字は拒否されるように、コードをより適切に改良するにはどうすればよいですか?

4

4 に答える 4

2

Eric が完全に一致する場合、それだけが配列に配置されます。

例 (Eric は配列内にありますが、Eriic はそうではありません)

ワーキングデモhttp://jsfiddle.net/9UcBS/1

text = "My name is Eric. Eric lives in New York Eriic";
var myName = "Eric";
var hits = [];

var pos = text.indexOf(myName);
while (pos > -1) {
    for (var j = pos; j < (myName.length + pos); j++) {
        hits.push(text[j]);
    }
    pos = text.indexOf(myName, pos + 1);
}
(hits.length === 0) ? console.log("Your name wasn't found!") : console.log(hits);
于 2013-07-20T06:11:50.297 に答える
0

文字列は文字配列ではありません。charAt文字列内の文字をその位置から取得するには、次のようにメソッドを使用する必要があります。

if ( text.charAt(i) == "E" ) {
    //...
}

またはさらに良い:

if ( text.charAt(i) == myName.charAt(0) ) {
    //...
}
于 2013-07-20T05:53:02.317 に答える