Website-Suche

TypeScript Array mit Array filtern


Mir zerbreche hier den Kopf.... Ich möchte ein Array mit einem anderen Array filtern.

Anwendungsfall: Ich habe ein Array und dieses Array kann mit dynamischen Kontrollkästchen gefiltert werden.

Bisher bin ich auf den folgenden Code gekommen:

var filteredList = this.arrayList.filter(function(e){
           return activeCheckbuttons.filter(function(e2){
               return e2.Description != e.Description
           }).length == 0;
})

Der obige Code funktioniert, wenn nur ein Kontrollkästchen angeklickt wird, aber wenn zwei Kontrollkästchen angeklickt werden, funktioniert er nicht.

Jemand?

Danke,

Antwort #1

Was Sie meiner Meinung nach brauchen, ist, für jedes Element in arrayList zu prüfen, ob es ein Element in activeCheckbuttons mit derselben Beschreibung gibt. Wenn es eines gibt, fügen wir dieses Element zum Ergebnis hinzu, aber wenn nicht, ignorieren wir es:

const filteredList = this.arrayList.filter(item1 => 
     !!activeCheckbuttons.find(item2 => item1.Description === item2.Description)
);

Jetzt, wie dieser Code funktioniert:

  • Mit filter führen wir eine Überprüfung für jedes Element im Array durch. Wenn das Prädikat für dieses Element true zurückgibt, dann wird das Element zurückgegeben. Wenn nicht, wird es übersprungen.
  • Innerhalb des Prädikats verwenden wir die find-Methode, um zu bestimmen, ob das Element, das wir überprüfen, im Array activeCheckbuttons existiert (indem wir ihre Beschreibungen vergleichen). find gibt das erste Element zurück, das einer Bedingung entspricht. Wenn also eines gefunden wird, ist das Prädikat für dieses Element true. Wenn keines gefunden wird, gibt es null zurück, was false ist, und das Element erscheint nicht im gefilterten Array.

Du wirst sehen, dass ich auch den !!-Operator verwende. Dieser Operator wendet einfach den logischen Nicht-Operator zweimal an. Warum? Einfach als eine Möglichkeit, ein Objekt in den Wert true zu konvertieren und null in false:

  • !!{} -> !(!{}) -> !(false) -> true
  • !!null -> !(!null) -> !(wahr) -> falsch

Das ist eigentlich nicht notwendig, aber ich mache es gerne, um im Code klarzustellen, dass ich true oder false zurückgeben möchte und nicht Objekte oder null.

Wie in meinem Kommentar beschrieben, besteht das Problem in deinem Code darin, dass du das zweite Array filterst und alle Elemente entfernst, die nicht die gleiche Beschreibung wie das überprüfte Element haben. Natürlich, wenn du mehr als eines hast, nehme ich an, dass sie unterschiedlich sind, sodass die filter-Funktion mindestens ein Element zurückgibt, der Haupt-filter false zurückgibt und dein Ergebnis-Array leer ist.

Wenn dies nicht genau der Filtermethode entspricht, die Sie benötigen, sagen Sie es mir, und ich werde den Code entsprechend anpassen.