功能:return True/False 基于子字符串在字符串中的存在

Function: return True/False based on presence of substring in string

我正在应对 CoderByte 的初学者 JavaScript 挑战。我的代码在 "true" 情况下工作,但是一旦我添加一个 else 子句来处理 "false" 情况,它就会开始出现问题。

挑战: 写一个函数ABCheck(str)来获取传递的str参数和return 如果字符 a 和 b 在字符串中的任意位置至少被恰好 3 个位置分隔一次,则字符串为真(即 "lane borrowed" 将导致真,因为 a 和 b 之间恰好有三个字符)。否则 return 字符串 false.

观察结果: 如果我删除该部分,无论如何代码都能正常工作。但是,如果我添加一个子句来处理虚假案例,我觉得计数器会中断。例如,对于 false 部分,如果 (AxxB) 位于字符串的最开头,它会起作用,但即使它位于字符串 (zAxxB) 的后面,它也会 returns 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()); 

您应该将 return false; 放在 for(var i = 0; i < arr.length; i++){...} 循环的 之外。

那是因为第一次只有当它没有发现条件arr[i].indexOf('a') != -1 && arr[i+3].indexOf('b') != -1true时它returns 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;
}

所以它会随时检查条件是否为真它会 return true 否则在 for 循环后它会 return false.

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