['1', '2', '3'].map(parseInt) => [1, NaN, NaN]の謎
今まで['1', '2', '3'].map(parseInt)
が意図した結果にならない([1, 2, 3]にならない)のは知っていたのだけど、理由がよくわからなかったので調べてみた。
JavaScriptのparseIntとmapを組み合わせる際の注意より:
mapに渡した関数には、引数としてvalue, index, selfが渡される。
を見てわかった。parseInt
の基数にindexの値が渡されてるのかーと。
parseInt('1', 0); // => 1
parseInt('2', 1); // => NaN
parseInt('3', 2); // => NaN
ということみたい。
parseFloat
の場合は基数とかないので[1, 2, 3]
が返ってくる。整数が欲しい場合は向かないけど……
lodashを使っている場合は_.parseInt
を使えば基数を省略した場合は10が指定されるので想定した値が返ってくる。
まあ、ちょっとタイプして
['1', '2', '3'].map(function(val) {
return parseInt(val, 10);
});
で良いのだけど。