功能:根据字符串中子字符串的存在返回True / False

时间:2015-01-22 03:49:52

标签: javascript arrays function substring

我正在处理CoderByte的初学JavaScript挑战。我的代码适用于" true" case,但是只要我添加一个else子句来处理" false"情况,它开始行为不端。

挑战: 编写一个函数ABCheck(str)来传递 str 参数,如果字符a和b分开则返回字符串true在字符串中的任何地方恰好有3个地方至少一次(即。"车道借用"将导致为真,因为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()); 

2 个答案:

答案 0 :(得分:2)

这是因为只有在第一次找不到条件arr[i].indexOf('a') != -1 && 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;
}

因此,如果条件为真,它将随时检查它将在true循环之后返回for,它将返回false

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

答案 1 :(得分:1)

您应该return false;循环for(var i = 0; i < arr.length; i++){...}