我目前正在使用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但我真的想遵循逻辑并理解正在发生的事情。我接近了吗?
答案 0 :(得分:1)
你真的很亲密。
你只有一个问题:
拿出来它会起作用!!
您可能喜欢的另一件事是添加到列表&#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是一个很好的工具。
祝你好运!