实际上我几分钟前就找到了答案。 但我发现了一些奇怪的东西。
这是我对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;有什么区别?和!=在上面的代码中?
答案 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);
}
}
}