2016-04-24 33 views
2

我正在上Free Code Camp.挑战这个'Missing letters'挑战如下指示:如何获得这个'缺少字母'功能在javaScript中工作?

查找传递信件范围缺失的字母,并返回。

如果所有字母出现在范围内,则返回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);

在此先感谢!

回答

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语句中没有测试任何条件。您需要实际比较第一个索引与第二个索引的字符的值。此外,因为你需要比较两个指标,你的迭代必须停止在去包容性的

[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 

如果在i循环[0,3]当我尝试访问

str[i+1] // index 4 

我会得到一个索引越界异常当i = 3 或者这就是为什么只有我,如果上午索引越界异常的i = 0时,如果我尝试访问

str[i-1] // index -1 

遍历到一个远离给定的边界

+0

谢谢!几个问题。 为什么在循环的条件下你做'str.length - 1'?你不想让循环遍历整个字符串吗? 不知道我理解你的陈述;你能解释一下吗?我想你会想要比较一下,如果随后的值在逻辑上跟随先前的值。 (这就是为什么我想出了那些'previous'和'next'变量)我知道'str.charCodeAt(i)+ 1!= str.charCodeAt(i + 1)'是不同的语法,但我的大脑认为它们是一样。但非常感谢您的回复!一直在这个工作一段时间! –

+0

我的答案底部的注释应该解释这一点;如果不清楚,我很抱歉。我会编辑答案以更好地解释。 – thedevelop3r

+0

@ thedevelop3r谢谢! –

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; 
}