Einführung
In diesem Lab werden wir untersuchen, wie man Array-Elemente basierend auf einer angegebenen Funktion aufspaltet. Wir werden die unzipWith()-Funktion verwenden, die ein von der zip()-Funktion erzeugtes Array nimmt und die angegebene Funktion anwendet, um die Elemente aufzuspalten. Am Ende dieses Labs werden Sie ein besseres Verständnis dafür haben, wie man Arrays manipuliert und benutzerdefinierte Operationen auf ihren Elementen ausführt.
Wie man Array-Elemente basierend auf einer Funktion aufspaltet
Wenn Sie die Elemente in einem von zip erzeugten Array aufspalten und eine Funktion anwenden müssen, können Sie unzipWith verwenden. Hier ist, wie Sie es implementieren können:
- Verwenden Sie
Math.max()und den Spread-Operator (...), um das längste Unterarray im Array zu erhalten, undArray.prototype.map(), um jedes Element zu einem Array zu machen. - Verwenden Sie
Array.prototype.reduce()undArray.prototype.forEach(), um gruppierte Werte auf einzelne Arrays zuzuordnen. - Verwenden Sie
Array.prototype.map()und den Spread-Operator (...), umfnauf jede einzelne Gruppe von Elementen anzuwenden.
const unzipWith = (arr, fn) =>
arr
.reduce(
(acc, val) => (val.forEach((v, i) => acc[i].push(v)), acc),
Array.from({
length: Math.max(...arr.map((x) => x.length))
}).map((x) => [])
)
.map((val) => fn(...val));
Um unzipWith zu verwenden, öffnen Sie das Terminal/SSH und geben Sie node ein. Anschließend können Sie das folgende Beispiel ausführen:
unzipWith(
[
[1, 10, 100],
[2, 20, 200]
],
(...args) => args.reduce((acc, v) => acc + v, 0)
);
// [3, 30, 300]
Dies wird ein Array von Elementen erzeugen, indem die Elemente im von zip erzeugten Eingabearray aufgespalten und die bereitgestellte Funktion angewendet wird.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab "Ungroup Array Elements Based on Function" abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.