我是编程新手,目前正在CodeAcademy上学习javascript。下面的代码来自一个教程,程序将搜索字符串以查找名称。程序将循环遍历数组,将每个字母与您名字的第一个字母进行比较,如果它看到该字母: 它会将该字母及其后面的所有字母推送到数组中,当它推送的字母数等于您名字中的字母数时停止。
我不明白的是:for (var j = i; j < (myName.length + i); j++)
为什么j <(myName.length + i)
而不是j<(myName.length)
?如果“Eric”的字母“E”是字符串中的第25个字符,那么j<(myName.length + i) = j<("4" + "25")
不会出错,因为正确的代码应该是j<("4")
,其中4是Eric的名字长度
我尝试使用j<(myName.length)
运行代码,但它无法正常工作,我似乎无法理解原因。
text = "Blah blah blah blah blah blah Eric \
blah blah blah Eric blah blah Eric blah blah \
blah blah blah blah blah Eric";
var myName = "Eric";
var hits = [];
// Look for "E" in the text
for(var i = 0; i < text.length; i++) {
if (text[i] == "E") {
// If we find it, add characters up to the length of my name to the array
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);
}
答案 0 :(得分:2)
在你的内循环中,你这样做:
for(var j = i;
当条件if (text[i] == "E") {
得到满足时,i
的值非常高(30)。
现在,当你这样做时:
for(var j = i; j < (myName.length); j++) {
你基本上是这样做的 -
for(var j = 30; j < 4; j++) {
所以循环永远不会开始;因为边界条件不满意。
但当你这样做时:
for(var j = i; j < (myName.length+i); j++) {
然后你这样做:
for(var j = 30; j < (30+4) ; j++) {
因此一切正常,应该如此。
答案 1 :(得分:1)
我希望您不会在以后的项目中使用上面的代码:)
text = 'Blah blah blah blah blah blah Eric blah blah blah Eric blah blah Eric blah blah blah blah blah blah blah Eric';
var hits = text.match(/Eric/g) || [];
if (hits.length) {
console.log('Your name was found ' + hits.length + ' times');
}
else {
console.log('Your name wasn\'t found!');
}
答案 2 :(得分:0)
如果我理解正确,您提供的代码工作正常,您不明白为什么?如果是这样,这是我的解释:
i
和j
标记text
中的位置。 i
中for(var i = 0; i < text.length; i++) {
被初始化为零。循环的工作方式是它将根据条件i
评估i < text.length;
,如果为真,则它将运行代码块,执行迭代器(i++
表示添加1到i),然后通过再次评估条件开始循环。
您会注意到j
被初始化为i
而不是零。那么,如果字符串i
的{{1}}位置的字母是“E”,那么它将开始另一个循环,将text
设置为j
(所以25 in上面的情况),然后迭代你的名字的长度..我相信这种情况让你困惑:
i
让我来看看这个循环中会发生什么:
首先,它会将for(var j = i; j < (myName.length + i); j++) {
设置为j
中的当前位置,方便text
知道。所以我们假设i
已经达到25.所以循环通过i
将j
设置为25。现在,由于我们需要 next 四个字符,而不是第一个四个字符i
,因此条件设置为text
。
由于“Eric”是四个字符,因此会将j < (myName.length + i)
,text[25]
,text[26]
和text[27]
添加到text[28]
。如果你去看hits
,你会注意到第25到第28个字母是(应该是)你的名字。