2017-01-26 17 views
0

実際、私は数分前に答えを見つけました。 しかし、私は奇妙な何かを見つけた。不足している文字freecodecamp

これは、freeCodeCampチャレンジの「Missing letters」に対する私の答えです。

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; 

} 

if文の<演算子を!=(同じではない)に変更すると、動作しません。 私にとって、それは!= = <と全く同じ働きをしているようです。 ( 'not same'は何かが他のものよりも大きいことを意味する可能性があります)

上記のコードで<と!=の違いは何ですか?

答えて

0

コードには<を使用したときに機能する小さな欠陥がありますが、!=は使用できません。

str.charCodeAt(i + 1)が表示されている場合は、このコードは、最後の反復で文字列の最後を過ぎて1つの点をチェックし、NaN結果を返します。

文字列「abce」を指定すると、fが< NaNであるかどうかがチェックされます。 NaNはfの値と比較できないので、if文には入りません。したがって、文字列変数に格納されている以前の反復で見つかった不足している文字dを保持します。

ただし、!=を与えても、同じシナリオでは、f!= NaNがわかり、if文に入ります。これは実際の不足している文字を上書きし、あなたの文字列変数のfで不足しているdを置き換えるため、FCCのテストケースに失敗します。

コードを修正するには、forループを変更して文字列の長さの前に1つの繰り返しを終了します。

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

あなたがNaNを信じる理由を私は理解していませんfより大きい。彼らは私が推測することはできません。彼らは偶数ではないから! –

+0

真実ではありません。どちらの場合でも問題ありませんが、NaNを数値と比較することはできないので条件は失敗しますので、同じ結果が得られます。したがって、forループ条件を変更する必要があります。 – Breakpoint25

+0

答えが間違っていると感じていますか、正しいですか?あなたがそれをマークすることができれば、私はもう質問はありません。 – Breakpoint25

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

}

関連する問題