所以,我有一个Float32Array
与100亿元素。其中一些元素有缺陷,我需要从阵列中删除这些元素。我应该如何调整类型数组的大小?
我所做的就是在最后移动那些叛逃的元素。我认为只需调整数组的大小并从数组中删除元素将很容易。令人惊讶的是,我找不到一个方法来做到这一点。
我不想创建一个新的数组,并将数据复制到该数据,因为内存限制。
有没有什么办法可以实现我的目标?有没有办法从阵列中删除那些没有内存重复的元素?
谢谢。
所以,我有一个Float32Array
与100亿元素。其中一些元素有缺陷,我需要从阵列中删除这些元素。我应该如何调整类型数组的大小?
我所做的就是在最后移动那些叛逃的元素。我认为只需调整数组的大小并从数组中删除元素将很容易。令人惊讶的是,我找不到一个方法来做到这一点。
我不想创建一个新的数组,并将数据复制到该数据,因为内存限制。
有没有什么办法可以实现我的目标?有没有办法从阵列中删除那些没有内存重复的元素?
谢谢。
当你“删除”项目,而不是把它们放在数组的末尾,使用slice
方法,因此它将动态调整大小(意味着arr.length
将在过程中更新)。
THX到@Dzmtrs:编辑
http://devdocs.io/javascript/global_objects/float32array http://devdocs.io/javascript/global_objects/typedarray/slice
可以使用的slice()
的JavaScript
splice()
反而不是这样的任务正是最佳的,在我看来,但有一件事您可以考虑将有缺陷的元素交换到数组的末尾(如您所说的那样),然后将这些索引设置为null。我不认为Javascript提供了任何有效的方法来调整或删除阵列中的元素,而无需创建新副本。但是,我可能会误解,所以为什么我将此留作评论而不是答案。 – SpencerD第二个想法,你有没有想过使用链接列表式的设置?这会使移除变得更简单,但是你会失去一些数组的便利方法/属性。但是,删除元素而不重复的功能会更容易,因为您可以说'previous.next = current.next',从而有效地删除可以通过垃圾回收清理的节点。 – SpencerD
@SpencerD这不是我的选择,我实际上使用three.js和我说的数组是顶点数组,所以它必须是键入数组。另外,我不认为设置'null'会对我有用。 –