Quelle
Beide map
und reduce
haben als Eingabe das Array und eine Funktion, die Sie definieren. Sie ergänzen sich in gewisser Weise: Sie map
können nicht ein einzelnes Element für ein Array mehrerer Elemente zurückgeben, während reduce
immer der Akkumulator zurückgegeben wird, den Sie eventuell geändert haben.
map
Mit map
iterieren Sie die Elemente und geben für jedes Element ein gewünschtes Element zurück.
Wenn Sie beispielsweise eine Reihe von Zahlen haben und deren Quadrate erhalten möchten, können Sie Folgendes tun:
const square = x => x * x
console.log([1, 2, 3, 4, 5].map(square))
reduce
Wenn Sie ein Array als Eingabe verwenden, können Sie ein einzelnes Element (z. B. ein Objekt, eine Zahl oder ein anderes Array) basierend auf der Rückruffunktion (dem ersten Argument) abrufen, mit der die Parameter accumulator
und abgerufen current_element
werden:
const numbers = [1, 2, 3, 4, 5]
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0))
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1))
Welches sollten Sie wählen, wenn Sie mit beiden dasselbe tun können? Versuchen Sie sich vorzustellen, wie der Code aussieht. Für das bereitgestellte Beispiel können Sie das Quadratarray wie erwähnt wie folgt berechnen reduce
:
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.push(current*current);
return acc;
}, [])
[1, 2, 3, 4, 5].map(x => x * x)
Wenn man sich diese anschaut, sieht die zweite Implementierung offensichtlich besser aus und ist kürzer. Normalerweise wählen Sie die sauberere Lösung, in diesem Fall map
. Natürlich können Sie es damit machen reduce
, aber kurz gesagt, denken Sie, was kürzer und schließlich besser wäre.