缺少字母功能 - 为什么返回undefined?

时间:2016-07-16 12:39:14

标签: javascript

我正在Free Code Camp上做一个篝火,而且我已接近尾声了,但最后一点我无法理解!

该函数应该使用一个字符串并返回缺少的字母(基于字母a-z)。它工作正常,除非缺少的字母是'i',它返回undefined。

我添加了一个if语句来检查当缺少的字母是'i'时,它符合另一个if语句的标准(因此应该执行那些代码行)并且它匹配,所以我没有想法为什么它会返回undefined。

function fearNotLetter(str) {
  missingLetter = '';
  charCode = 0;
    
  for (i = 0; i < str.length -1 ; i++) {
    charCode = str.charCodeAt(i);

    if (str.charCodeAt(i + 1)-charCode == 2) {            
      missingLetter = str.charCodeAt(i)+1;
      missingLetter = String.fromCharCode(missingLetter);
    } else { 
      missingLetter = undefined;
    }
  }
    
  console.log(missingLetter);
  return missingLetter;
}
    
fearNotLetter("abcdefghjklmno");

非常感谢任何人都可以给予帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

因为你在每一轮都没有设置undefined的缺失字母值 - 即使你之前在循环中找到了一个字母。

我建议在使用var关键字之前声明所有变量,并使用missingLetter初始化undefined

如果找到丢失的字母,你可以break循环。

function fearNotLetter(str) {
    var missingLetter = undefined,
        charCode,
        i;

    for (i = 0; i < str.length - 1 ; i++) {
        charCode = str.charCodeAt(i);
        if (str.charCodeAt(i + 1) - charCode == 2) {
            missingLetter = String.fromCharCode(charCode + 1);
            break;
        }
    }
    return missingLetter;
}

console.log(fearNotLetter("abcdefghjklmno"));

答案 1 :(得分:1)

尝试这一点,一旦得到丢失的字母,你就缺少打破循环,而在下一次迭代中,缺少的字母被设置为未定义

function fearNotLetter(str) {
  missingLetter = '';
  charCode = 0;


  for (i = 0; i < str.length -1 ; i++) 
  {

    charCode = str.charCodeAt(i);
    
    if (str.charCodeAt(i + 1)-charCode == 2) {
    
      missingLetter = str.charCodeAt(i)+1;
      missingLetter = String.fromCharCode(missingLetter);
      break;
    }  
    else 
    { 
      missingLetter = undefined;
    }
  }
  console.log(missingLetter);
  return missingLetter;
}
fearNotLetter("abcdefghjklmno");