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
filterführen wir eine Überprüfung für jedes Element im Array durch. Wenn das Prädikat für dieses Elementtruezurü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 ArrayactiveCheckbuttonsexistiert (indem wir ihre Beschreibungen vergleichen).findgibt das erste Element zurück, das einer Bedingung entspricht. Wenn also eines gefunden wird, ist das Prädikat für dieses Elementtrue. Wenn keines gefunden wird, gibt esnullzurück, wasfalseist, 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.
