Maison >interface Web >js tutoriel >Comment supprimer efficacement des objets d'un tableau basé sur la propriété d'un objet en JavaScript ?

Comment supprimer efficacement des objets d'un tableau basé sur la propriété d'un objet en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 20:36:30375parcourir

How to Efficiently Remove Objects from an Array Based on Object Property in 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!

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