Wie man Objekte in JavaScript filtert
-
Verwenden Sie
reduce
, um ein Objekt in JavaScript zu filtern -
Verwenden Sie die Funktion
map
, um JavaScript-Objekte zu filtern
Dieses Tutorial führt ein, wie man ein Objekt in JavaScript filtert. Wir werden lernen, wie man eine ähnliche Filter
-Methode wie im Datentyp Array zum Object
in JavaScript implementiert.
Verwenden Sie reduce
, um ein Objekt in JavaScript zu filtern
Lassen Sie uns nun die Funktion zum Filtern von Objekten mit Hilfe der reduce
-Funktion implementieren.
Angenommen, wir haben das folgende Objekt:
var grades = {linearAlgebra: 90, chemistry: 95
biology: 90
languages : 96
}
Das obige Objekt repräsentiert die Noten eines Schülers; wir müssen dieses Objekt filtern und erhalten nur die Fächer mit einer Note von 95 oder mehr.
var grades = {linearAlgebra: 90, chemistry: 95, biology: 90, languages: 96};
Object.filter =
function(mainObject, filterFunction) {
return Object.keys(mainObject)
.filter(function(ObjectKey) {
return filterFunction(mainObject[ObjectKey])
})
.reduce(function(result, ObjectKey) {
result[ObjectKey] = mainObject[ObjectKey];
return result;
}, {});
}
console.log('The grades are ', grades);
var targetSubjects = Object.filter(grades, function(grade) {
return grade >= 95;
});
console.log('Target Subjects are ', targetSubjects);
Ausgabe:
"The grades are ", {
biology: 90,
chemistry: 95,
languages: 96,
linearAlgebra: 90
}
"Target Subjects are ", {
chemistry: 95,
languages: 96
}
Wir implementieren die Funktion Object.filter
als Object.filter = function(mainObject, filterFunction)
im obigen Beispiel. Wir können diesen Beispielcode wie unten beschrieben vereinfachen.
Object.filter = function(mainObject, filterFunction) {
return Object.keys(mainObject)
.filter(innerFilterFunction)
.reduce(reduceFunction, {});
}
Er hat 3 Hauptschritte zur Implementierung der Funktion “Objekt.filter”:
Object.keys()
gibt ein Array von Schlüsseln aus den Schlüssel-Werte-Paaren im Objekt zurück. In unserem Beispiel ist eslinearAlgebra, chemistry, biology, languages
.- Das Ergebnis der Funktion
Object.keys()
wird an die Callback-FunktioninnerFilterFunction
geschickt, die auch ein Argument der Filter-Funktion ist, und die Ausgabe dieser FunktioninnerFilterFunction
werden die gefilterten Schlüssel sein. Die Ausgabe ist in unserem Beispielchemistry, languages
. - Das Ergebnis des Filters wird nun an unsere Funktion
reduce()
übergeben, die jeden Wert zu seinem Schlüssel addiert und ein neues Objekt zurückgibt, das alle diese Paare enthält. Das Ergebnis in unserem Beispiel ist also{chemistry: 95, languages: 96}
.
Wenn wir das obige Beispiel mit der arrow
-Syntax von ES6 neu erstellen wollen, könnten wir es wie folgt umschreiben: {chemistry: 95, languages: 96}
.
var grades = {linearAlgebra: 90, chemistry: 95, biology: 90, languages: 96};
Object.filter = (mainObject, filterFunction) =>
Object.keys(mainObject)
.filter((ObjectKey) => filterFunction(mainObject[ObjectKey]))
.reduce(
(result, ObjectKey) =>
(result[ObjectKey] = mainObject[ObjectKey], result),
{});
console.log('The grades are ', grades);
var targetSubjects = Object.filter(grades, (grade) => grade >= 95);
console.log('Target Subjects are ', targetSubjects);
Ausgabe:
The grades are {linearAlgebra: 90, chemistry: 95, biology: 90, languages: 96}
Target Subjects are {chemistry: 95, languages: 96}
Es verwendet den Komma
-Operator, um das Objekt result
zurückzugeben, und es kann auch durch Object.assign
ersetzt werden, das ebenfalls das Ergebnis zurückgibt. Der Code kann also wie folgt umgeschrieben werden.
Object.filter = (mainObject, filterFunction) =>
Object.keys(mainObject)
.filter((ObjectKey) => filterFunction(mainObject[ObjectKey]))
.reduce(
(result, ObjectKey) =>
Object.assign(result, {[ObjectKey]: mainObject[ObjectKey]}),
{});
Verwenden Sie die Funktion map
, um JavaScript-Objekte zu filtern
Da wir in der obigen Lösung die Funktion reduce
verwenden, können wir auch die Funktion map
verwenden, um JavaScript-Objekte zu filtern.
Object.filter = function(mainObject, filterFunction) {
return Object.assign(...Object.keys(mainObject)
.filter(function(ObjectKey) {
return filterFunction(mainObject[ObjectKey])
})
.map(function(ObjectKey) {
return {[ObjectKey]: mainObject[ObjectKey]};
}));
}
Wir ersetzten die Funktion reduce
durch die Funktion map
, wie oben gezeigt, und benutzten auch die Funktion Object.assign
und schickten ihr mit der Syntax spread
alle Operationen von Object.keys()
bis .map()
, so dass die vollständige Implementierung nun wie folgt aussehen sollte:
var grades = {linearAlgebra: 90, chemistry: 95, biology: 90, languages: 96};
Object.filter =
function(mainObject, filterFunction) {
return Object.assign(...Object.keys(mainObject)
.filter(function(ObjectKey) {
return filterFunction(mainObject[ObjectKey])
})
.map(function(ObjectKey) {
return {[ObjectKey]: mainObject[ObjectKey]};
}));
}
console.log('The grades are ', grades);
var targetSubjects = Object.filter(grades, (grade) => grade >= 95);
console.log('Target Subjects are ', targetSubjects);
Ausgabe:
The grades are {linearAlgebra: 90, chemistry: 95, biology: 90, languages: 96}
Target Subjects are {chemistry: 95, languages: 96}
Verwandter Artikel - JavaScript Filter
Verwandter Artikel - JavaScript Object
- Objekte aus einem Array in JavaScript suchen
- Holen Sie sich den Wert des Objekts durch eine Referenz auf den Schlüssel
- JavaScript-Objekt zerstören
- Objekt im Array nach Eigenschaftswert in JavaScript suchen
- Objekte in JavaScript drucken
- Sortieren Array von Objekten nach einzelnen Schlüssel mit Datum Wert