我正在处理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());
答案 0 :(得分:2)
这是因为只有在第一次找不到条件arr[i].indexOf('a') != -1 && arr[i+3].indexOf('b') != -1
为true
时它才会返回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++){...}
。