Heim > Artikel > Web-Frontend > Wie entferne ich Objekte basierend auf Eigenschaften in JavaScript effizient aus einem Array?
Verwendung von nativem JavaScript zum Entfernen von Objekten aus einem Array nach Objekteigenschaften
Bei der Arbeit mit Arrays von Objekten kann das Entfernen bestimmter Objekte basierend auf Eigenschaften sinnvoll sein essentiell. Allerdings kann die einfache Verwendung von splice() aufgrund der abnehmenden Array-Länge zu Komplikationen führen. So lösen Sie dieses Problem mit nativen JavaScript-Techniken:
Dekrementieren von i nach dem Löschen:
Um das Problem mit Splice zu beheben, dekrementieren Sie i nach jedem Löschvorgang, um dies zu berücksichtigen verschobener Index. Dies verhindert das Überspringen von Array-Elementen und stellt sicher, dass alle Zielobjekte entfernt werden.
for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) !== -1) { arrayOfObjects.splice(i, 1); i--; } }
Array-Elemente neu schreiben:
Um lineare Löschvorgänge zu vermeiden, können Sie Folgendes tun Schreiben Sie nur die Elemente um, die Sie im Array behalten möchten.
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;
Verwenden eines Hash-Sets:
Für schnellere Suchvorgänge verwenden Sie ein Hash-Set zum Speichern der IDs Anzahl der zu löschenden Objekte.
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;
Wiederverwendbare Funktion:
Verpacken Sie diese Logik der Einfachheit halber in eine wiederverwendbare Funktion.
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; }; const toDelete = new Set(['abc', 'efg']); const arrayOfObjects = [{id: 'abc', name: 'oh'}, {id: 'efg', name: 'em'}, {id: 'hij', name: 'ge'}]; filterInPlace(arrayOfObjects, obj => !toDelete.has(obj.id));
Das obige ist der detaillierte Inhalt vonWie entferne ich Objekte basierend auf Eigenschaften in JavaScript effizient aus einem Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!