【问题标题】:Function: return True/False based on presence of substring in string功能:根据字符串中子字符串的存在返回真/假
【发布时间】:2015-03-20 18:49:30
【问题描述】:

我正在处理 CoderByte 的初学者 JavaScript 挑战。我的代码在“真”情况下工作,但是一旦我添加一个 else 子句来处理“假”情况,它就开始出现异常。

挑战: 编写一个函数 ABCheck(str) 以获取传递的 str 参数,如果字符 a 和 b 分开,则返回字符串 true至少一次在字符串中的任意位置恰好相差 3 个位置(即,“借用车道”将导致 true,因为 a 和 b 之间正好有三个字符)。否则返回字符串 false。

观察:如果我删除该部分,代码无论如何都可以工作。但如果我添加一个条款来处理虚假案件,我觉得柜台坏了。例如,对于 false 部分,如果 (AxxB) 位于字符串的最开头,它会起作用,但即使它位于字符串 (zAxxB) 的后面,它也会返回 false。也许柜台坏了,或者我在不正确的地方有 else 子句?类似的东西。

感谢任何提示以及对初学者的耐心!

function ABCheck(str) { 

    //normalizes the string into an array without spaces
    var arr = str.toLowerCase().split("").join("").replace( /\s/g, "")

    //searches the entire string for the substring and returns true if it's found
    for(var i = 0; i < arr.length; i++){
        if(arr[i].indexOf('a') != -1 && arr[i+3].indexOf('b') != -1){
            return true
        }

        //returns false if substring doesn't exist in string
        else{
            return false
        }
    }
}

ABCheck(readline()); 

【问题讨论】:

  • 这似乎是一个正则表达式的好工作。
  • .split("").join("") 的意义何在? join 将其转回字符串。
  • 你为什么使用indexOf()arr[i]是单个字符,所以你可以写arr[i] == 'a'
  • 问题陈述表明该函数应该返回 字符串 truefalse。您返回的是布尔值,而不是字符串。
  • 是的,这正是我要说的。当您搜索可以位于字符串中任何位置的内容时,您可以使用indexOf()。但是当你只有一个角色时,它只能在一个地方。

标签: javascript arrays function substring


【解决方案1】:

你应该把return false; out 放在for(var i = 0; i &lt; arr.length; i++){...} 循环中。

【讨论】:

  • 我想到并尝试了这个,但它给了我“SyntaxError: Unexpected token else”。想法?谢谢你。编辑:我仍然使用“else”而不是“return false”。在将其移出循环时这样做可以修复它。
  • 你不再需要'else'了! 'else' 仅带有 'if' 子句!
【解决方案2】:

这是因为第一次只有当它没有找到条件arr[i].indexOf('a') != -1 &amp;&amp; arr[i+3].indexOf('b') != -1true 时才返回false 并且函数结束。

function ABCheck(str) {
    var arr = str.toLowerCase().split("").join("").replace( /\s/g, "")
    for(var i = 0; i < arr.length; i++){
       if(arr[i].indexOf('a') != -1 && arr[i+3].indexOf('b') != -1){
            return true
        }
    }
    return false;
}

所以它会随时检查条件是否为真,否则会在for循环之后返回true,否则会返回false

注意:-我认为.split("").join("") 是不必要的工作。

【讨论】:

  • 这个成功了,谢谢。在发布之前,我实际上已经尝试将它移到循环之外,但我仍然使用“else {return false}”语句而不是“return false”。 Split 和 Join 对我来说很新,我一定会回去看看他们在做什么。感谢您的提示。
  • 关于 .split() 和 .join(),不计算空格吗?如果不是,为什么?我在 toLowerCase 方法之后删除了所有内容,它仍然有效。我什至尝试通过打印出 来“测试”它,它确实有空格,例如 [t,e,s,t, ,t,e,s,t]。我觉得这会甩掉 [i+3] 部分。这种上下移动数组是否不会将空格视为字符?感谢您的任何解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多