首頁 > web前端 > js教程 > 如何根據屬性值高效率地從陣列中刪除物件?

如何根據屬性值高效率地從陣列中刪除物件?

Patricia Arquette
發布: 2024-11-01 12:41:02
原創
1030 人瀏覽過

How to Efficiently Remove Objects from an Array Based on a Property Value?

透過物件屬性從陣列中刪除物件

要根據特定屬性從陣列中刪除對象,請使用原生JavaScript 方法,避免拼接過程中因長度而減小而導致的問題

首先確定要刪除的對象,並將其儲存在變數中,例如listToDelete。接下來,迭代物件數組 (arrayOfObjects) 並檢查物件的 ID 屬性是否與 listToDelete 中的任何 ID 相符。如果找到匹配項,請使用 splice 從 arrayOfObjects 中刪除該物件。

要解決拼接操作期間長度遞減的問題,請在每次刪除物件時遞減 i 變數。或者,將要保留的元素寫入數組:

<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);
...
if (setToDelete.has(obj.id)) {...}
登入後複製

最後,封裝邏輯在可重複使用函數中以方便使用:

<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>
登入後複製

這種方法透過匹配對象的屬性值來有效地從數組中刪除對象,並透過避免線性時間操作來確保最佳性能。

以上是如何根據屬性值高效率地從陣列中刪除物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板