请帮我理解这个'for循环'中的逻辑

时间:2015-06-22 22:47:04

标签: javascript arrays for-loop

我目前正在使用Code Academy进行有趣的学习。他们推出了推送。并且很快就嵌套for循环而没有很多初始信息。我认为我有点理解逻辑,并希望看看是否有人可以帮助分解它......

var text = "Here is a string with the name rick sometimes not always rick   and sometimes rick";
//assigning text string to variable text  

var myName = "rick";  
//assigning rick to variable myName  
var hits = [];  
// assinging an empty array to variable hits  
for (var i = 0; i < text.length; i++); {  
    //for loop i = 0, and as long as i = less than the length of entire text  string keep incrementing 1
    if (text[i] === "r") {  
        //while looping through text when you find an "r" enter second for loop  
        for(var j = i; j < (i+ myName.length); j++){  
            //J takes the value of i at this point and it should be 0 and should   increment 4 steps as myName = 4 characters

            hits.push(text[j]);  
            //this push statement should add each letter of my name to the hits array  
        }  
    }  
}  

此时我的代码不起作用。我在第一个for循环下放置了一个console.log,它只打印了84个。 “console.log(”I =“+ I)” 我知道这是非常n00b但我真的想遵循逻辑并理解正在发生的事情。我接近了吗?

3 个答案:

答案 0 :(得分:1)

你真的很亲密。

你只有一个问题:

  • &#34;;&#34;之后。它只是结束了#34;对于&#34;循环无所事事。

拿出来它会起作用!!

您可能喜欢的另一件事是添加到列表&#34; hits&#34;所有关于&#39; r&#39;字符。

你应该这样做:

if (text[i] === "r") {  
    var word = "";
    for(var j = i; j < (i+ myName.length); j++) {  
        word+=text[j];
    }  
    hits.push(word);  
}  

另外,请注意i + myName.length仍然在text.length的限制内(即i + myName.length&lt; text.length)

希望它有所帮助!

答案 1 :(得分:0)

您的代码非常接近。你在第一次for循环后不小心插了一个分号:

for (var i = 0; i < text.length; i++);

这基本上形成1行块,与此相同:

for (var i = 0; i < text.length; i++) {
}

取出分号,它应该做你想要的:)。虽然如果你的目的只是推动里克斯,那么你需要检查的不只是“r”,你需要验证后面的每个字符也等于rick。

答案 2 :(得分:0)

你有一个“;”之后不应该那样。此外,您仍然受到字符串长度的限制。所以,你的声明变成了:

for(var j = i; j < (i + myName.length) && i < text.length; j++){  

例如,如果你有一个长度为82个字符的字符串,并且你在文本的末尾找到一个'r'(i = 81),你的原始循环会将j设置为81,然后尝试检查字符在索引82,83,84和85的字符串中,它们不存在并且会导致错误。添加i&lt;的附加检查。 text.length确保您不要尝试检查不存在的项目。

我不知道你的课程有多远。以防万一,'&amp;&amp;&amp;'是一个AND,所以j必须小于(i + myName.length)并且还小于text.length。

这是一个工作的JSFiddle(http://jsfiddle.net/onlinespaces/xj39974c/1/

对于像这样的事情,使用JSFiddle是一个很好的工具。

祝你好运!