使用string.length + counter变量

时间:2013-04-14 08:08:42

标签: javascript string function

我是编程新手,目前正在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);
}

3 个答案:

答案 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)

如果我理解正确,您提供的代码工作正常,您不明白为什么?如果是这样,这是我的解释:

ij标记text中的位置。 ifor(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.所以循环通过ij设置为25。现在,由于我们需要 next 四个字符,而不是第一个四个字符i,因此条件设置为text

由于“Eric”是四个字符,因此会将j < (myName.length + i)text[25]text[26]text[27]添加到text[28]。如果你去看hits,你会注意到第25到第28个字母是(应该是)你的名字。