Gecko 2中的Typed Arrays:Float32Array连接和扩展

jan*_*nce 13 javascript arrays gecko typed-arrays

我对Javascript Typed Arrays有点困惑.

我有几个Float32Array,没有concat方法.我不知道提前有多少人,顺便说一下.我想将它们连接到另一个Float32Array中,但是:

  • 正如我之前所说,没有连接方法
  • 如果我尝试写过数组长度,数组不会扩展(也就是说这不起作用 - 请注意event.frameBuffer和缓冲区都是Float32Array,我不知道缓冲区的最终长度是多少):

var length_now = buffer.length;
for (var i = 0; i < event.frameBuffer.length; i += 1) {
      buffer [length_now + i] = event.frameBuffer[i];
}
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方案是将Float32Array复制到一个常规数组中,这绝对不是我想要的.你会怎么做,stackoverflowers?

Fré*_*idi 19

类型化数组基于数组缓冲区,无法动态调整大小,因此无法写入数组末尾或使用push().

实现您想要的方法的一种方法是分配一个新的Float32Array,足够大以包含两个数组,并执行优化的副本:

function Float32Concat(first, second)
{
    var firstLength = first.length,
        result = new Float32Array(firstLength + second.length);

    result.set(first);
    result.set(second, firstLength);

    return result;
}
Run Code Online (Sandbox Code Playgroud)

那会让你写:

buffer = Float32Concat(buffer, event.frameBuffer);
Run Code Online (Sandbox Code Playgroud)

  • 如果有人像我一样想知道@janesconference的第二个问题的答案 - 哪里有“.set()”的文档 - 请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript /参考/Global_Objects/Float32Array (2认同)