根據物件屬性從陣列中刪除物件
在 JavaScript 中,透過符合特定屬性從陣列中刪除物件可能具有挑戰性。這是因為使用拼接方法(通常嘗試這樣做)會導致陣列長度在刪除時減少。
修正使用拼接方法
要解決此問題,您可以透過在刪除發生時遞減循環索引來實現修復:
<code class="javascript">for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) !== -1) { arrayOfObjects.splice(i, 1); i--; } }
覆蓋數組元素
或者,您可以透過逐步避免線性時間刪除覆蓋您要保留的數組元素:
<code class="javascript">var end = 0; for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) === -1) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
用於查找的哈希集
為了高效查找,您可以使用雜湊集:
<code class="javascript">const setToDelete = new Set(listToDelete); let end = 0; for (let i = 0; i < arrayOfObjects.length; i++) { const obj = arrayOfObjects[i]; if (setToDelete.has(obj.id)) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
輔助函數
將此方法封裝到輔助函數中:
<code class="javascript">const filterInPlace = (array, predicate) => { let end = 0; for (let i = 0; i < array.length; i++) { const obj = array[i]; if (predicate(obj)) { array[end++] = obj; } } array.length = end; };</code>
以上是JavaScript中如何根據物件屬性有效率地從陣列中刪除物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!