2017-01-10 7 views
0

私は非常に簡単なコードと機能を持っています。 私の問題はです:与えられた番号の最後の桁を選択したいのですが、使用したいときには機能しません。この機能で数字が1000を超える場合に最後の桁を選択して使用する方法

私の仕事は、例えばので、番号を読みやすくすることです:数はであれば、出力は第一でなければなりません 。数値がの場合、出力は3番目のである必要があります。数字がの場合、出力は402ndでなければなりません。

function humanizeChar (number) { 
var lastOne = number.toString().split('').pop(); 
    if (lastOne === 1) { 
    return number + 'st'; 
    } else if (lastOne === 2) { 
    return number + 'nd'; 
    } else if (lastOne === 3) { 
    return number + 'rd'; 
    } else { 
    return number + 'th'; 
    } 
} 
console.log(humanizeChar(1131)); // my output is 1131th 
+0

'lastOne'は文字列です。 '' 1 '=== 1''は 'false'です。 –

+0

@FelixKlingありがとうございました。私はそれを変更したと思っています... – Furious

答えて

1

あなたは、値と型を比較strict equality===と数に文字列(lastOne)を比較しようとしています。あなたはsimple equality==を使用するか、数値を文字列に変更することができます。

function humanizeChar (number) { 
 
    var lastOne = number.toString().split('').pop(); 
 
    console.log(lastOne); 
 
    if (lastOne === '1') { 
 
    return number + 'st'; 
 
    } else if (lastOne === '2') { 
 
    return number + 'nd'; 
 
    } else if (lastOne === '3') { 
 
    return number + 'rd'; 
 
    } else { 
 
    return number + 'th'; 
 
    } 
 
} 
 
console.log(humanizeChar(1131)); // my output is 1131th

+0

あなたの助けてくれてありがとう、あなたの素早い応答のためにあなたの答えを受け入れました – Furious

1

あなたは数字で出力文字列を比較するようで、これを試してみてください:

function humanizeChar (number) { 
var lastOne = number.toString().split('').pop(); 
    if (lastOne === "1") { 
    return number + 'st'; 
    } else if (lastOne === "2") { 
    return number + 'nd'; 
    } else if (lastOne === "3") { 
    return number + 'rd'; 
    } else { 
    return number + 'th'; 
    } 
} 
console.log(humanizeChar(1131)); // my output is 1131th 
+1

あなたの答えは、問題の内容とソリューションの解決方法それ。 –

1

あなたの問題である、ということ===演算子を使用して、文字列と数値を比較しています。 SO上this非常に良い答えで述べたように:

アイデンティティ(===)演算子はなし型変換を除いて、オペレータが行われ 等価(==)に同じ動作、およびタイプは 同じでなければなりません等しいとみなされる。

だから、あなたはあなたのlastOne(例えばparseInt(lastOne)を使用して)数を手動で変換することができいずれか、またはその代わり==演算子を使用します。またはlastOneを文字列リテラル('1''2'、...)と比較することもできます。あなたがいくつかの変更を加える必要があり

1

===等しい値と同じ型に==等しいJavaScriptの比較演算子 演算子説明

あなたの場合には、正しいオペレータが「==」である

1

次のようなあなたのコード: -

function humanizeChar (number) { 
number = 7882;   //just give some number for checking 
var lastOne = number.toString().split('').pop(); 
//console.log(lastOne); 
    if (lastOne == 1) { 
    return number + 'st'; 
    } else if (lastOne == 2) { 
    return number + 'nd'; 
    } else if (lastOne == 3) { 
    return number + 'rd'; 
    } else { 
    return number + 'th'; 
    } 
} 
console.log(humanizeChar()); 
1

最後の桁から2番目のアカウントも必要です。例えば、101は100と1の代わりに100でなければなりません。

//Improving from Ori Drori's answer 
function humanizeChar (number) { 
    var numStrs = number.toString().split(''); 
    var lastOne = numStrs.pop(); 
    var isSeondFromLastGreaterThanZero = (numStrs.length > 0 && numStrs.pop() !== '0'); 
    var suffix = "th"; 

    if (!isSeondFromLastGreaterThanZero) { 
     if (lastOne === '1') { 
      suffix = 'st'; 
     } else if (lastOne === '2') { 
      suffix = 'nd'; 
     } else if (lastOne === '3') { 
      suffix = 'rd'; 
     } 
    } 

    return number.toString() + suffix; 

} 
console.log(humanizeChar(1131)); // my output is 1131th 
console.log(humanizeChar(1101)); // 1101st 
console.log(humanizeChar(2)); // 2nd 
関連する問題