我正在'Missing letters'面临Free Code Camp.挑战,挑战表明以下内容:
在传递的字母范围内找到丢失的字母并将其返回。
如果范围内存在所有字母,则返回undefined。
var previous = str.charCodeAt(j);
var next = str.charCodeAt(j) + 1;
我以为我最初把它钉了,
next
简单地 - 如果next
不正确,例如newstr = String.fromCharCode(next);
的值不是后续字符,也不是之前的字符,返回$i
提前致谢!
答案 0 :(得分:2)
试试这个:
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:
考虑字符串中的字符&#34; abcd&#34;:
a, b, c, d
0, 1, 2, 3
如果我在尝试访问
时循环[0,3]str[i+1] // index 4
当i = 3时,我将获得一个超出范围的索引异常 或者,如果i = 0,如果我尝试访问
,则索引超出范围异常str[i-1] // index -1
这就是为什么我只迭代一个远离给定边界的原因
答案 1 :(得分:0)
我觉得这个解决方案很容易理解:
function fearNotLetter(str) {
var missingLetter;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) - str.charCodeAt(i-1) > 1) {
missingLetter = String.fromCharCode(str.charCodeAt(i) - 1);
}
}
return missingLetter;
}