我正在处理'Missing letters'上的Free Code Camp.挑战。该挑战表明以下内容:
在传递的字母范围内找到丢失的字母并返回。
如果所有字母都在该范围内,则返回undefined。
function fearNotLetter(str) {
var newstr;
for(var j = 0; j < str.length; j++){
var previous = str.charCodeAt(j);
var next = str.charCodeAt(j) + 1;
if(next === false){
newstr = String.fromCharCode(next);
} else {
return undefined;
}
}
return newstr;
}
以为我一开始就钉了钉子,
var previous = str.charCodeAt(j);
var next = str.charCodeAt(j) + 1;
很简单-如果
next
不正确,例如next
的值不是后一个字符或不是前一个字符,请返回newstr = String.fromCharCode(next);
提前致谢!
最佳答案
尝试这个:
function fearNotLetter(str) {
for(var i = 0; i < str.length - 1; i++)
{
if(str.charCodeAt(i) + 1 != str.charCodeAt(i+1))
return String.fromCharCode(str.charCodeAt(i) + 1);
}
return undefined;
}
通常,设置和返回不必要的变量不是一个好习惯。您也不会在if语句中测试任何条件。您实际上需要将第一个索引的字符值与第二个索引进行比较。另外,由于您需要比较2个索引,因此迭代必须在
[0, length - 2] with a + 1 for the secondary index
要么
[1, length - 1] with a - 1 for the secondary index
关于长度的注意事项-1:
考虑字符串“ abcd”中的字符:
a, b, c, d
0, 1, 2, 3
如果我尝试访问时在[0,3]上循环播放
str[i+1] // index 4
当我= 3时,我将获得索引超出范围的异常
或者如果我尝试访问时i = 0时索引超出范围异常
str[i-1] // index -1
这就是为什么我只迭代到给定边界之外的一个