Heim > Web-Frontend > js-Tutorial > Wie entferne ich Objekte basierend auf der Objekteigenschaft in JavaScript effizient aus einem Array?

Wie entferne ich Objekte basierend auf der Objekteigenschaft in JavaScript effizient aus einem Array?

Linda Hamilton
Freigeben: 2024-11-02 20:36:30
Original
365 Leute haben es durchsucht

How to Efficiently Remove Objects from an Array Based on Object Property in JavaScript?

Entfernen von Objekten aus einem Array basierend auf der Objekteigenschaft

In JavaScript kann das Löschen eines Objekts aus einem Array durch Abgleichen einer bestimmten Eigenschaft eine Herausforderung sein . Dies liegt daran, dass die Verwendung der Splice-Methode, wie sie häufig versucht wird, zu einer verringerten Array-Länge führt, wenn Löschungen auftreten.

Korrektur für die Verwendung der Splice-Methode

Um dieses Problem zu beheben, Sie können einen Fix implementieren, indem Sie den Schleifenindex dekrementieren, wenn ein Löschvorgang erfolgt:

<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--;
    }
}
Nach dem Login kopieren

Array-Elemente überschreiben

Alternativ können Sie lineare Löschvorgänge durch schrittweises Vermeiden vermeiden Überschreiben der Array-Elemente, die Sie behalten möchten:

<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;
Nach dem Login kopieren

Hash-Set für Lookups

Für effiziente Lookups können Sie ein Hash-Set verwenden:

<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;
Nach dem Login kopieren

Hilfsfunktion

Kapseln Sie diesen Ansatz in einer Hilfsfunktion:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie entferne ich Objekte basierend auf der Objekteigenschaft in JavaScript effizient aus einem Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage