【发布时间】: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' -
问题陈述表明该函数应该返回 字符串
true或false。您返回的是布尔值,而不是字符串。 -
是的,这正是我要说的。当您搜索可以位于字符串中任何位置的内容时,您可以使用
indexOf()。但是当你只有一个角色时,它只能在一个地方。
标签: javascript arrays function substring