我正在尝试在花药Float32Array的中间插入一个Float32Array。我正在创建一个新的Float32Array并使用3 for循环将元素插入到这个新的Float32Array中(插入前为1,插入新Float32Array为1,插入后为1)。
这需要很长时间。有没有更快的方法将Float32Array插入另一个?例如,是否有类似于
的功能// Suppose originalArray and insertedArray are 2 Float32Arrays of
// lengths 100000 and 5000 respectively, and I want to insert
// insertedArray into originalArray at element 50000.
var combinedArray = new Float32Array(105000);
combinedArray.set(originalArray.subarray(0, 50000));
combinedArray.subarray(50000, 55000).set(insertedArray);
combinedArray.subarray(55000, 105000).set(originalArray.subarray(50000, 100000));
目前,上述代码无效,因为subarray
方法未返回与整个set
相关的Float32Array
方法的值。
答案 0 :(得分:2)
你可以在一堆指令中做些事情:
var combinedArray = new Float32Array(105000);
combinedArray.set(originalArray);
[].splice.apply(combinedArray, [50000, 0].concat([].slice.call(insertedArray, 0)));
但是,我并不知道它的表现。我担心combinedArray
会以某种方式转换为Array
,从而占用大量内存并占用CPU。它不应该,但我不确定。
无论如何,set
方法有一个second optional argument,即数组的偏移量,必须设置新元素。所以,你的最后两行将成为:
combinedArray.set(insertedArray, 50000);
combinedArray.set(originalArray.subarray(50000, 100000), 55000);
也许这更有效率。
修改:根据this test,它是。所以,你有自己的方式。