所以,我有一個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'會對我有用。 –