如何将普通数组转换为Float32Array?

5

我找到了许多从数组创建Float32Array的方法,但它们都涉及复制所有元素。 我想避免这样的成本,因为该数组永远不会再次使用。 我只想进行强制转换。有可能吗?


检查这个答案并将实现翻转过来? https://dev59.com/S2cs5IYBdhLWcg3wjUqR - Kyle Pittman
不,这个答案涉及到制作一个全新的数组副本。 - MaiaVictor
我认为你不能简单地将其“转换”,因为普通数组可以包含任何类型的元素,而不仅仅是数字,所以JS必须在普通数组元素中包含一些类型信息。Kyle参考答案中的信息只是使用.slice()进行复制。 - jfriend00
2
这是一个转换操作;因此,结果(无论是向前还是向后)都是一个新的数组/对象,即使循环被某些函数隐藏。与逐项转换(例如数字数组->字符串数组)不同,Float32Array对象由专门的实现表示,并且与任何标准数组/对象分开,这就是为什么整个数组本身必须是“new”的原因。 - user2864740
1个回答

12

不可能。一个 Float32Array 一定是一个与普通数组不同的对象。

如果你想避免复制数组项的开销,a) 首先不要使用普通数组,或者 b) 让使用它的函数也能处理普通数组。

如果您正在寻找 "转换" 操作,则可以使用普通数组调用 Float32Array 构造函数:

var arr = [0.3, 1, 2];
var typedArr = new Float32Array(arr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接