2017-04-15 35 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

相關問題