Ich habe eine verbundene React-Komponente, die ein Array von Plot-Objekten aus dem Status erhält.React-Redux: Filtern eines Arrays von Objekten aus dem Zustand, ob ihre Eigenschaften anderen Arrays aus dem Zustand
Es erhält auch mehrere Arrays von Strings aus Zustand. Wie folgt aus:
function mapStateToProps(state) {
return {
plots: state.plots.plots,
varietyFilter: state.plots.varietyFilter,
regionFilter: state.plots.regionFilter,
growerFilter: state.plots.growerFilter,
plotNameFilter: state.plots.plotNameFilter
};
}
sieht Jedes Grundstück etwas wie folgt aus:
{ name, variety, region, grower}
... mit jeder Eigenschaft eine Zeichenfolge sein.
Ich möchte die Plots filtern, ob die entsprechenden Eigenschaften in diesen Filter-Arrays sind.
Die Standardlösung ist
so etwas wieconst filteredArray = inputArray.filter(a => filterArray.indexOf(a.property)
verwenden Es gibt drei Probleme, die ich mit diesem Ansatz haben. Erstens, wenn das Filterarray leer ist, werden keine Elemente des gefilterten Arrays passieren, während ich möchte, dass sie alle passieren. Zweitens, was passiert, wenn diese Filter-Arrays, die aus dem Status angezeigt werden, noch nicht initialisiert wurden? Es wird einen Fehler geben, da indexOf nicht verfügbar ist. Drittens möchte ich diese Filtermethoden verketten, aber nur diejenigen ketten, die eine Art Filter-Array initialisiert haben.
Bisher habe ich mit diesem kommen:
if (this.props.plots) {
filteredProps = this.props.plots.filter(function(plot) {
if (!varietyFilter.indexOf) {
return true;
}
return varietyFilter.indexOf(plot.variety) > -1;
});
}
Das ist nur durch, wenn auch alles zu passieren scheint. Wenn ich die erste Rückgabeanweisung lösche, erhalte ich einen Fehler - die Methode indexOf ist nicht vorhanden, wenn die Komponente zuerst initialisiert wird.
Also, zwei Fragen. Erstens, wie filtere ich ein Array von Objekten dafür, ob eine gegebene Eigenschaft jedes Objekts in einem Array von Strings enthalten ist, die im Zustand existieren können oder nicht? Zweitens, wie mache ich das für eine Reihe von Arrays, die jeweils einer anderen Eigenschaft der Objekte im ursprünglichen Array entsprechen?
Könnten Sie bitte geben typische Werte für jede der Variablen mit dem Sie arbeiten:
mutliple Filter Chaining kann getan werden? I.e Plots & Filter? Ich bin mir immer noch nicht sicher, ob es sich um Arrays von Objekten oder um Objekte mit Arrays handelt. – Jaxx