我正在处理'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


这就是为什么我只迭代到给定边界之外的一个

08-18 20:53
查看更多