普通の配列と同じ感覚でTypedArray
を使っていたら、思わぬ形で引っかかってしまいました。
TypedArray
とは
JavaScriptが進化するに連れて、通信・画像・音声など巨大なバイナリデータを扱う場面も増えてきたので、そういったもののハンドリングに便利な、型やサイズを固定したUint8Array
、Float32Array
などの配列オブジェクトが作れるようになっています。
なお、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
のように一時的にコピーした配列が作られることもありません)。