[プログラマー/Javascript]17文字列ベース


問題の説明
文字列sの長さが4または6で、数値のみで構成されている関数を完了します.solution例えば、sが"a234"であればFalseを返し、"1234"であればTrueを返す.
せいげんじょうけん
  • sは、長さが1より大きく、長さが8より小さい文字列である.
  • I/O例
    sreturn"a234"false"1234"true
    に答える
    最初に提出された回答
    function solution(s) {
        return s.length === 4 || s.length === 6 ? (isNaN(s) ? false : true ) : false
    }
    最初は非数字(Not-a-Number)を判別するisNaN()を用いた.同様に、Number.isNaN()というものもあり、非数値trueを返さずに計算できない場合や検索できない場合にのみ返されるparseInt('apple')の関数であるため、今回は不適切である.しかし、コミット後、1つのケースで未知の失敗が発生したことがわかりました.
    再送信された回答
    function solution(s) {
        return s.length === 4 || s.length === 6 ? (s == parseInt(s) ? true : false ) : false
    }
    どう考えても問題がどこにあるのか分からないので、他の人は解決方法を確認しました.親切に書いてください.したがって、整数以外の数では、NaNを返すfalseも失敗する.
    説明:
    3つの演算子に3つの演算子を加える方法で解きます.まず、isNaN()の長さが4または6であるかどうかを確認し、正しい場合、比較ssの値が同じかどうかを確認します.数値で構成されていない文字列の場合は、結果が異なるparseInt(s)trueが返されます.(この場合falseは文字列であり、sではなく===を使用する必要があります.