我不能在Float32Array上使用.push(),我收到错误,所以我试着像这样添加它:
myarray = new Float32Array() ;
myarray.push = function()
{
for( var i in arguments )
{
this[this.length] = arguments[i] ;
}
} ;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我没有得到错误,但我的数组的值都是0.为什么?
基本上a Float32Array只是一个ArrayBuffer对象的视图(与JS中的所有类型数组一样).这ArrayBuffer有一个固定的长度,这反过来Float32Array继承.
所以总结一下:你不能随意改变你的大小Float32Array.唯一的可能性是:
如果你想多次添加多个值,我强烈建议不要这样做.这完全否定了使用类型化数组可能获得的任何性能优势!
像 Float32Array 这样的类型化数组被设计为较低级别的方法,如果您熟悉动态内存分配(例如 C 语言),那么这种方法会更有意义。
这里我们分配了内存(底层 ArrayBuffer)和使用了内存(类型化数组中分配的项),这在原始内存中不一定是相同的。
您可以像这样推送类型数组:
(myarray = new Float32Array(myarray.length+1)).set([...myarray, appendix])
Run Code Online (Sandbox Code Playgroud)
appendix您要推送的新项目在哪里。它不仅丑陋,而且非常低效:您应该预测数组将增长多少并分配更多额外空间,而不是仅仅分配+1(并记住还剩下多少空间)。
为了使其内存有效,您可以共享一个底层 ArrayBuffer(请参阅此处的示例),只需记住 Float32Array 中的每一项在 ArrayBuffer 中占用 4 个字节。
如果您不想为此烦恼并且只想随时推送,请继续使用旧的通用数组。
| 归档时间: |
|
| 查看次数: |
7504 次 |
| 最近记录: |