Maison  >  Article  >  interface Web  >  Comment supprimer efficacement des objets d'un tableau en fonction d'une valeur de propriété ?

Comment supprimer efficacement des objets d'un tableau en fonction d'une valeur de propriété ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 12:41:02928parcourir

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

Supprimer des objets du tableau par propriété d'objet

Pour supprimer des objets d'un tableau en fonction d'une propriété spécifique, utilisez des méthodes JavaScript natives et évitez les problèmes causés par la diminution de la longueur lors de l'épissure opérations.

Tout d'abord, déterminez les objets à supprimer et stockez-les dans une variable, telle que listToDelete. Ensuite, parcourez le tableau d'objets (arrayOfObjects) et vérifiez si la propriété ID de l'objet correspond à un ID dans listToDelete. Si une correspondance est trouvée, utilisez splice pour supprimer l'objet de arrayOfObjects.

Pour résoudre le problème de diminution de la longueur lors des opérations d'épissage, décrémentez la variable i chaque fois qu'un objet est supprimé. Vous pouvez également écrire les éléments à conserver sur le tableau :

<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;

Pour une recherche efficace dans les environnements d'exécution modernes, utilisez un jeu de hachage :

<code class="javascript">const setToDelete = new Set(listToDelete);
...
if (setToDelete.has(obj.id)) {...}

Enfin, encapsulez la logique dans une fonction réutilisable pour une utilisation pratique :

<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>

Cette approche supprime efficacement les objets d'un tableau en faisant correspondre leurs valeurs de propriété et garantit des performances optimales en évitant les opérations en temps linéaire.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn