0

CodeAcademy 的目标尚不清楚。 http://bit.ly/167N8bX 我认为应该遍历一个长字符串,并将我名字的字符从字符串中推入一个数组中。

这是它的陈述方式:

“它将检查文本中您姓名的第一个字母,然后将等于您姓名长度的字符数推送(添加)到数组中。通过检查数组,您将能够查看是否提到了您的名字! "

*更新。现在我看到了讲师的输出,它实际上并没有检查您的名字是否被提及。对于像我这样的新手来说,令人困惑的说明。

我在第 5 步,共 7 步:链接:http ://bit.ly/167N8bX

var text = "Lorem ipsum dolor nayr sit amet, consectetur adipisicing elit, sed do eiusmod tempor yan ut Ryan labore et dolore magna aliqua. Ut enim ad ry minim veniam, quis nostrud ryan exercitation ullamco ryan laboris nisi ut aliquip ex ea ry commodo rya consequat. END";
var myName = "Ryan";
var hits = [];

for(var i = 0; i < text.length; i++) {
    // Loop thru "text" string
    // check each char one-by-one
    // if it finds uppercase "R"
    if(text[i] == "r".toUpperCase()){

    // push the next 3 chars into hits[] array...
    // by looping on myName.length
    // end push() when myName.length loops ends
       for(var j = 0; j < myName.length; j++){
           hits.push(text[i]);
           console.log(hits);
       }
    }
}

*更新你如何防止输出发生每个循环,并将每次推送存储在数组中,直到它完成所有循环?

上面代码的错误输出:

[ 'R' ]
[ 'R', 'y' ]
[ 'R', 'y', 'a' ]
[ 'R', 'y', 'a', 'n' ]
4

3 回答 3

1

刚看到代码学院的练习。您的代码没有任何问题,除了您正在推送text[i]而不是text[i+j]进入 hits 数组。

实际上代码学院希望您根据他们的提示编写代码。

在他们的提示中,您将能够看到Your loop should stop when it hits the value of the first iterator (say, i) plus the length of your myName variable.

你的代码

var text = "Lorem ipsum dolor nayr sit amet, consectetur adipisicing elit, sed do eiusmod tempor yan ut Ryan labore et dolore magna aliqua. Ut enim ad ry minim veniam, quis nostrud ryan exercitation ullamco ryan laboris nisi ut aliquip ex ea ry commodo rya consequat. END";
var myName = "Ryan";
var hits = []; // empty array to 'push()' my name into
for(var i = 0; i < text.length; i++ ){
    if(text[i] == myName[0]){ 
        for(var j = 0; j < myName.length; j++){ 
            hits.push(text[j+i]);
        }
    }        
}

如果你用下面的代码替换你的代码,他们会说好的

var text = "Lorem ipsum dolor nayr sit amet, consectetur adipisicing elit, sed do eiusmod tempor yan ut Ryan labore et dolore magna aliqua. Ut enim ad ry minim veniam, quis nostrud ryan exercitation ullamco ryan laboris nisi ut aliquip ex ea ry commodo rya consequat. END";
var myName = "Ryan";
var hits = []; // empty array to 'push()' my name into
for(var i = 0; i < text.length; i++ ){
    if(text[i] == myName[0]){ 
        for(var j = -1; j < myName.length+1; j++){ 
            hits.push(text[j+i+1]);
        }
    }        
}
于 2013-10-12T20:10:02.753 回答
1

我认为问题在于,在您的内部循环中,您每次只推送同一个字母。您需要将其修改为以下内容:

hit.push(text[i + j])

那应该可以解决问题。祝您继续编码好运!

于 2013-10-12T19:34:21.320 回答
0

我现在明白了。讲师的代码并没有真正检查我的姓名字符串(“Ryan”)。他的代码不使用 MyName 数组的第一个字母。他手动输入“E”(“Eric”是他的例子)。他的代码找到手动输入的“E”,然后将接下来的 3 个字符推入“E”之后(它们不必使用 myName.length 将“ric”匹配到 hits[] 数组中。

于 2013-10-12T20:10:12.100 回答