我对Javascript Typed Arrays有点困惑。

我有几个Float32Array,没有concat方法。我不知道他们提前多少,顺便说一句。
我想将它们全部串联在另一个Float32Array中,但是:

就像我之前说的

  • ,没有串联方法
  • 如果我尝试写超过数组的长度,则数组不会扩展(也无法正常工作-请注意event.frameBuffer和buffer都是Float32Array,我不知道缓冲区的最终长度是多少be):

  • var length_now = buffer.length;
    for (var i = 0; i < event.frameBuffer.length; i += 1) {
          buffer [length_now + i] = event.frameBuffer[i];
    }
    

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

    最佳答案

    类型化的数组基于array buffers,无法动态调整其大小,因此无法在数组末尾写入或使用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;
    }
    

    那将允许您编写:
    buffer = Float32Concat(buffer, event.frameBuffer);
    

    09-27 22:37