所以,我有一个拥有1亿个元素的Float32Array
。其中一些元素是缺陷的,我需要从数组中删除它们。
我所做的是在最后移动那些叛逃的元素。我认为只调整数组的大小并因此从数组中删除元素会很容易。令人惊讶的是,我找不到办法做到这一点。
由于内存限制,我不想创建新数组并将数据复制到该数组。
我有什么方法可以实现吗?有没有办法从阵列中删除那些没有内存重复的元素?
感谢。
答案 0 :(得分:1)
当您“删除”项目时,不要将它们放在数组的末尾,而是使用slice
方法,因此它将动态调整大小(意味着{I}将在此过程中更新)
http://devdocs.io/javascript/global_objects/float32array http://devdocs.io/javascript/global_objects/typedarray/slice
编辑:
Thx to @Dzmtrs:您可以使用arr.length
代替splice()
答案 1 :(得分:0)
subarray
方法基于相同的基础ArrayBuffer返回一个新的TypedArray,因此在内存中不会重复原始TypedArray的内容。
const a = new Uint8Array([10, 20, 30, 40, 50]);
console.log(a);
// Uint8Array [10, 20, 30, 40, 50]
const b = a.subarray(2, 4);
console.log(b);
// Uint8Array [30, 40]
console.log(b.byteLength);
// 2
请注意,共享的ArrayBuffer本身不会更改:
console.log(new Uint8Array(b.buffer));
// Uint8Array(5) [ 10, 20, 30, 40, 50 ]
console.log(a.buffer === b.buffer);
// true
如果使用slice
方法而不是上面的subarray
方法,则将复制内存,因此缓冲区将不相等。
MDN。