缺少字母freecodecamp

时间:2017-01-26 12:27:43

标签: javascript operator-keyword

实际上我几分钟前就找到了答案。 但我发现了一些奇怪的东西。

这是我对freeCodeCamp挑战中“遗失字母”的回答。

function fearNotLetter(str) {

var string; 

for (i=0;i<str.length;i++) {
  if(str.charCodeAt(i)+1 < str.charCodeAt(i+1)){
    string = String.fromCharCode(str.charCodeAt(i)+1);
 }
}

return string;

}  

当我改变&lt;运算符在if语句中进入!=(不一样),它不起作用! 对我来说,似乎!=与&lt;完全相同运营商。 (因为'不相同'可能意味着某些东西比另一个更大。)

&lt;有什么区别?和!=在上面的代码中?

3 个答案:

答案 0 :(得分:0)

您的代码有一个小缺陷,当您使用&lt;但不是!=。

如果你看到str.charCodeAt(i + 1);此代码在最后一次迭代时检查字符串末尾之后的一个位置,并返回NaN结果。

如果我提供字符串“abce”,它将检查f是否为&lt; NaN的。我认为NaN无法与f的值进行比较,所以它不会进入if语句。因此,它将保留在先前迭代中找到的缺失字母d,该字母d存储在字符串变量中。

但是,如果你提供!=,那么在相同的情况下它知道f!= NaN并进入if语句。然后,这会覆盖实际丢失的字母并且无法通过FCC测试用例,因为它正在用字符串变量中的f替换缺少的d。

要修复代码,只需将for循环更改为在字符串长度之前结束一次迭代。

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

答案 1 :(得分:0)

这是我的方法,不使用.charCodeAt()函数:)

function fearNotLetter(str) {
  var ind;
  var final = [];
  var alf =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
  str = str.split('');
  ind = alf.splice(alf.indexOf(str[0]),alf.indexOf(str[str.length-1]));
  for(var i=0;i<ind.length;i++){
    if(str.indexOf(ind[i]) == -1){
      final.push(ind[i]);
    }
  }
  if(final.length != 0){
    return final.join('');
  }
  return;
}

fearNotLetter("bcef");

答案 2 :(得分:0)

我的解决方案:

function fearNoLetter(str){
var j=str.charCodeAt(0);
for(var i=str.charCodeAt(0); i<str.charCodeAt(str.length-1); i++){
    j = str.charCodeAt(i-str.charCodeAt(0));
    if (i!=j){
        return String.fromCharCode(i);
    }
}

}