LoginSignup
3
1

More than 5 years have passed since last update.

配列の初期化のためにmapメソッドを用いる際のふるまいについて

Posted at

配列の初期化を書くときに、値が未代入の配列にmapメソッドを使おうとして、

Array(3).map(e => 0);

みたいなものを書いても思ったとおり動作しないですよね。Array.prototype.map()は値を代入されていない要素をスキップするので。
なので、通常は、

[...Array(3)].map(e => 0);
Array.from(Array(3)).map(e => 0);

のように、配列を再度生成するかと思います。

ところで、TypedArray.prototype.map()はこのスキップ処理をしないので、

new Int8Array(3).map(e => 0);

これは普通に動きますから、配列の要素が数値であると決まっているならTypedArrayを使った方がいい場面も多いかもですね。
 
StringArrayの登場が待たれます。
 
 
 
なお、MDNには、

callback関数は値を割り当てたtyped arrayのインデックスに対してのみ呼び出されます。すなわち、undefined値である場合や、削除された場合や、値が割り当てられていない場合のインデックスに対しては呼び出されません。
TypedArray.prototype.map() - JavaScript | MDN

と、このスキップ処理をするように書かれていますが、仕様を見る限りこれは誤記かと思います。
 
 
 

3
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1