Einführung
In diesem Lab werden wir uns die Funktion countBy ansehen, die dazu verwendet wird, die Elemente eines Arrays basierend auf einer angegebenen Funktion zu gruppieren und die Anzahl der Elemente in jeder Gruppe zurückzugeben. Wir werden untersuchen, wie diese Funktion verwendet werden kann, um die Werte eines Arrays auf eine Funktion oder eine Eigenschaftsname abzubilden und wie man ein Objekt erstellt, um die Elemente in jeder Gruppe zu zählen, indem man Array.prototype.reduce() verwendet. Wir werden auch mehrere Beispiele betrachten, um zu verstehen, wie diese Funktion in realen Szenarien eingesetzt wird.
Wie man in JavaScript Elemente in einem Array gruppiert und zählt
Um in JavaScript Elemente in einem Array zu gruppieren und zu zählen, folgen Sie diesen Schritten:
- Öffnen Sie das Terminal/SSH und geben Sie
nodeein, um mit der Codeausführung zu beginnen. - Verwenden Sie die Methode
Array.prototype.map(), um die Werte eines Arrays auf eine Funktion oder einen Eigenschaftsnamen abzubilden. - Verwenden Sie die Methode
Array.prototype.reduce(), um ein Objekt zu erstellen, wobei die Schlüssel aus den abgebildeten Ergebnissen erzeugt werden. - Erstellen Sie eine Funktion namens
countBy, die ein Array und eine Funktion als Argumente nimmt. - Innerhalb der
countBy-Funktion verwenden Sie einen bedingten Operator, um zu überprüfen, ob das übergebene Argument eine Funktion oder ein Eigenschaftsname ist. Wenn es eine Funktion ist, verwenden Sie sie als die Abbildungsfunktion. Wenn es ein Eigenschaftsname ist, greifen Sie auf diese Eigenschaft der Arrayelemente zu. - Verwenden Sie die
reduce()-Methode, um ein Objekt zu erstellen, wobei jeder Schlüssel ein einzigartiges Element im Array darstellt und dessen Wert die Anzahl der Vorkommen in dem Array ist.
Hier ist der Code:
const countBy = (arr, fn) =>
arr
.map(typeof fn === "function" ? fn : (val) => val[fn])
.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
Sie können die countBy-Funktion mit den folgenden Beispielen testen:
countBy([6.1, 4.2, 6.3], Math.floor); // {4: 1, 6: 2}
countBy(["one", "two", "three"], "length"); // {3: 2, 5: 1}
countBy([{ count: 5 }, { count: 10 }, { count: 5 }], (x) => x.count); // {5: 2, 10: 1}
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab "Gruppierte Elemente zählen" abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.