2017-04-15 33 views
1

所以,我有一个Float32Array与100亿元素。其中一些元素有缺陷,我需要从阵列中删除这些元素。我应该如何调整类型数组的大小?

我所做的就是在最后移动那些叛逃的元素。我认为只需调整数组的大小并从数组中删除元素将很容易。令人惊讶的是,我找不到一个方法来做到这一点。

我不想创建一个新的数组,并将数据复制到该数据,因为内存限制。

有没有什么办法可以实现我的目标?有没有办法从阵列中删除那些没有内存重复的元素?

谢谢。

+0

的JavaScript splice()反而不是这样的任务正是最佳的,在我看来,但有一件事您可以考虑将有缺陷的元素交换到数组的末尾(如您所说的那样),然后将这些索引设置为null。我不认为Javascript提供了任何有效的方法来调整或删除阵列中的元素,而无需创建新副本。但是,我可能会误解,所以为什么我将此留作评论而不是答案。 – SpencerD

+0

第二个想法,你有没有想过使用链接列表式的设置?这会使移除变得更简单,但是你会失去一些数组的便利方法/属性。但是,删除元素而不重复的功能会更容易,因为您可以说'previous.next = current.next',从而有效地删除可以通过垃圾回收清理的节点。 – SpencerD

+0

@SpencerD这不是我的选择,我实际上使用three.js和我说的数组是顶点数组,所以它必须是键入数组。另外,我不认为设置'null'会对我有用。 –

回答

1

当你“删除”项目,而不是把它们放在数组的末尾,使用slice方法,因此它将动态调整大小(意味着arr.length将在过程中更新)。

THX到@Dzmtrs:编辑

http://devdocs.io/javascript/global_objects/float32array http://devdocs.io/javascript/global_objects/typedarray/slice

可以使用的slice()

+0

'array.slice(...)'将返回OP表示他希望避免的原始数组的新副本。 – SpencerD

+0

basic(例如从空数组中)'array.slice()'做同样的事情(返回新数组),但我多次使用它,它实际上在基数组中进行修改。因此,我猜如果你不使用返回值,它是原始数组,这是返回值.. – Vivick

+0

嗯有趣的观察。我从来没有看过,但我正在阅读Mozilla的开发页面,它说它返回了一个新的数组。但是,如果你的观察是正确的,那么'array.slice()'肯定会成为一种方法。 – SpencerD

相关问题