LoginSignup
0
1

More than 1 year has passed since last update.

TypedArrayをmapしようとしたら

Posted at

普通の配列と同じ感覚でTypedArrayを使っていたら、思わぬ形で引っかかってしまいました。

TypedArrayとは

JavaScriptが進化するに連れて、通信・画像・音声など巨大なバイナリデータを扱う場面も増えてきたので、そういったもののハンドリングに便利な、型やサイズを固定したUint8ArrayFloat32Arrayなどの配列オブジェクトが作れるようになっています。

なお、TypedArrayはこれらの総称、あるいは仕様書上ほかの内部的な名称で、ソースコードに直接TypedArrayと書くことは通常ありません。

実装されているメソッド

TypedArrayは固定長である以上、破壊的に長さを変更するような.push.spliceは存在しませんが、それ以外は.forEach.reduce.joinなど、通常の配列にあるメソッドもだいたい揃っています。

.mapの罠

その中に.mapも存在するのですが、mapした結果は 同じ型のTypedArray でなければならない、という大きな制約がついてきます。TypeScript+VSCodeで書いていたので型エラーとなりすぐに気付けたのですが、そうでなかったら気づかないままコードが思うように動かない、というハマりパターンに突っ込んでいたかもしれないです。

このような場合、Array.fromを活用できます。TypedArrayももちろんiterableですのでArray.fromの第1引数に渡せますし、第2引数に関数を渡せばmapのように動作をします([...typedArr].mapのように一時的にコピーした配列が作られることもありません)。

0
1
0

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
0
1