2016-04-27 12 views
2

が文字列で一桁のint型を解析するために、簡単なJavaScriptを実行しようとすると、アレイの利回り奇妙な結果にのparseIntの適用:は、次のように

var s = "22123222222213123212322123213222"; 
var a = s.split(""); 
var b = a.map(parseInt); 
console.log(b); 
[2, NaN, 1, 2, 3, 2, 2, 2, 2, 2, 2, 2, 1, 3, 1, 2, 3, 2, 1, 2, 3, 2, 2, 1, 2, 3, 2, 1, 3, 2, 2, 2] 

なぜNaNは、インデックス1を持つ要素のためにあるのでしょうか?ここでは、コンソールで

フィドル:私は、この「マップ(番号)」事業をルックアップするために持っていたと感じたの下に正しい答えを取得した後 https://jsfiddle.net/po6oy1ws/

EDIT

。 Mozillaには、この特定のケースに関する「つかまえ」の句があります。 Mozilla gotcha case

+0

'a.map(X => X | 0);' https://jsfiddle.net/ po6oy1ws/1/ –

答えて

2

parseInt 2つのパラメータ

のparseInt(文字列、基数)を有します。

マップ(currentValueは、インデックス、アレイ)

したがってcurrentValueindexparseInt関数にradixとして渡された:

map

とのコールバックは、3つのパラメータを受け付け。明示的に基数とparseIntを使用します。

var s = "22123222222213123212322123213222"; 
var a = s.split(""); 
var b = a.map(e => parseInt(e, 10)); 

またはその代わりparseIntNumberを使用します。

var s = "22123222222213123212322123213222"; 
var a = s.split(""); 
var b = a.map(Number); 
+0

'a.map'は配列の値、インデックス、配列そのものを' parseInt'(またはこの答えの場合は 'Number')に渡します。 Ergoなぜ気力が重要であるのか? – notacouch

+1

'.map()'は 'radix'として使われるインデックス(0,1,2、...)を提供します。 –