Maison >interface Web >js tutoriel >Comment supprimer efficacement des objets d'un tableau basé sur la propriété d'un objet en JavaScript ?
Supprimer des objets d'un tableau en fonction d'une propriété d'objet
En JavaScript, supprimer un objet d'un tableau en faisant correspondre une propriété spécifique peut être difficile . En effet, l'utilisation de la méthode d'épissage, comme cela est souvent tenté, entraîne une diminution de la longueur du tableau à mesure que les suppressions se produisent.
Correction de l'utilisation de la méthode d'épissage
Pour résoudre ce problème, vous pouvez implémenter un correctif en décrémentant l'index de boucle lorsqu'une suppression se produit :
<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--; } }
Écrasement des éléments du tableau
Alternativement, vous pouvez éviter les suppressions de temps linéaire en procédant progressivement écraser les éléments du tableau que vous souhaitez conserver :
<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;
Ensemble de hachage pour les recherches
Pour des recherches efficaces, vous pouvez utiliser un ensemble de hachage :
<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;
Fonction d'assistance
Encapsulez cette approche dans une fonction d'assistance :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!