1

我正在通过 Codecademy 学习 JavaScript,但我遇到了一个问题。下面的代码应该在text变量中搜索我的名字,myName然后将所有单个字母推送到hits数组中。我写的代码不正确,但 Codecademy 说它是正确的,让我继续上课。

我一直在尝试解决我没有运气的问题。问题是,当我运行该hits.push(text);行时,它将输出整个变量,但我已经尝试hits.push(text[i]);并得到未定义的结果。有人可以帮我理解我在哪里犯了错误吗?

/*jshint multistr:true */
var text = "XsddfasASSFABrandonSFsdfdasBrandonsddfadfaBrandon";
var myName = "Brandon";
var hits = [];
for (i=0; i<=text.length;i++){
    if (text[i]===myName[i]){
        for(var x=i; x<i+myName.length;x++){
            hits.push(text);
        }
    }
}
if (hits.length===0){
    console.log("Your name wasn't found!");
} else {
    console.log(hits);
}
4

4 回答 4

2

indexOf通常你会使用, match, search, substror来做这种事情substring,它们都是字符串方法

但是,出于本练习的目的,您可以执行以下操作:

var text = "XsddfasASSFABrandonSFsdfdasBrandonsddfadfaBrandon";
var myName = "Brandon";
var hits = [],
    namePosition = 0;
for (var i = 0; i < text.length; i++) {
    if (text[i] === myName[namePosition]) {
        hits.push(text[i]);
        namePosition ++;
        if (hits.length === myName.length) {
            break;
        }
    }
    else {
        namePosition = 0;
        hits = [];
    }
}
if (hits.length === 0) {
    console.log("Your name wasn't found!");
} else {
    console.log(hits);
}​

(参见http://jsfiddle.net/wCWxr/1/工作)。您的原始代码存在的问题包括:

  1. 您尝试比较text[i]myName[i]但两个字符串的索引不匹配。

  2. 您尝试一次将整个字符串推texthits而不是一个字符

  3. 您的逻辑不处理开头而不是结尾的可能性myNametext例如,如果文本是 aerwerBrasdfsgars

我的建议通过记录(用namePosition)我们当前在字符串中的位置来解决这个问题myName,并在我们找到text与 中的相关字符匹配的字符时递增该位置myName。如果字符不匹配,那么它不是真正的命中,所以我们重置hits = []namePosition = 0。如果字符全部匹配,则hits最终达到的长度,myName因此我们跳出循环。

于 2012-12-09T18:04:15.270 回答
2

我能想到的解释你的错误的最好方法就是简单地回顾一下你所写内容的一些逻辑。

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

您的for循环将迭代变量i中的字符数text,因此:49 次。

if (text[i]===myName[i]){

第一次运行for循环,i=0您正在检查是否text[0]严格等于myName[0]text[0] = XmyName[0] = B。不满足严格等于条件,因此循环继续递增irepeat:text[1] = smyName[1] = r。这种情况又持续了 47 次,但条件从未满足。myName[i]在前 7 个循环之后未定义。

于 2012-12-09T18:06:39.703 回答
0

如果您尝试查找 myName 是否在文本中,请执行以下操作:

正则表达式:

var pattern = new RegExp(myName);
if (pattern.test(text)){
    console.log(myName);
}else {
    console.log("Your name wasn't found!");
}

指数:

if (text.indexOf(myName) != -1){
    console.log(myName);
}else {
    console.log("Your name wasn't found!");
}
于 2012-12-09T17:59:32.397 回答
0
if (text[i]===myName[i]){  

此行应该会产生错误,因为 myName[i] 不是 myName 的第一个字母。

if (text[i]===myName[0]){

更改此行应该有效。

于 2014-05-18T15:18:59.190 回答