JS中TypedArray的map方法
项目中遇到Int16Array经过转换得到常规Array的场景,最初尝试使用map方法转出目标数组.
// 场景: TypedArray ---> Array
测试发现Int16Array.prototype.map始终返回Int16Array,没有得到想要的Array,如下:
var a = new Int16Array([1,2,3,4]);
a.map((x,i)=>[i,x+10]) instanceof Array //false
a.map((x,i)=>[i,x+10]) instanceof Int16Array //false
//分析: TypedArray ---> map ---> TypedArray(非Array)
查看规范中对TypedArray.prototype.map的定义,确实是如此设计的。
针对项目中场景的解决方案:
方案1:TypedArray转数组后再进行map
Array.from(a).map((x,i)=>[i,x+10])
方案2: 使用Array的map而不是TypedArray的map
Array.prototype.map.call(a,(x,i)=>[i,x+10])