【发布时间】:2013-07-19 12:06:59
【问题描述】:
我正在运行以下代码来获取显示单词 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 中的字符并将其作为输出返回,而拒绝任何其他字符?
【问题讨论】:
-
为什么要说找不到名字?您的代码中没有任何内容可以将
myName与文本进行比较。它所做的只是使用myName.length作为for循环限制的一部分,但它对myName中的字符没有任何作用。 -
如果你想知道名字是否在文本中找到,为什么不使用
text.indexOf(myName)? -
我已经测试了你的代码,但它的行为不像你说的那样。
-
您能解释一下您的代码的用途吗?也许有一种更简单的方法可以实现您想要的。
标签: javascript arrays loops for-loop