我正在运行以下代码以获取相关输出,该输出显示单词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中的字符并作为输出返回,而其他任何字符都将被拒绝?

最佳答案

如果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);

10-06 05:46