web-dev-qa-db-ja.com

文字列を数値node.jsに変換します

Req.paramsをNumberに変換しようとしています。これは、スキーマでyear paramに定義したものだからです。

私が試してみました

req.params.year = parseInt( req.params.year, 10 );  

そして

Number( req.params.year);

そして

1*req.params.year;

しかし、それらのどれも動作しません。何かインストールする必要がありますか?

53
user3488862

何かをインストールする必要はありません。

parseInt(req.params.year, 10);

正常に動作するはずです。

console.log(typeof parseInt(req.params.year)); // returns 'number'

ParseIntを使用する場合の出力は何ですか?それはまだ文字列ですか?

107
Tusk

ParseInt()を使用することは、主に失敗しないため、悪い考えです。また、INFINITYの場合のように、一部の結果が予期しないものになる可能性があるためです。
以下は、予期しない動作を処理するための関数です。

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

以下のテストケースの結果を参照してください。

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

結果:

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN
6
tejp124

完全な答えではありません Okですので、これは、今でも非常に有効なparseIntに関する情報を補足するためのものです。 Expressでは、reqまたはresオブジェクトをまったく変更できません(不変)。したがって、このデータを効果的に変更/使用する場合は、別の変数にコピーする必要があります(var year = req.params.year)。

2
Werlious