Quelle
Beide mapund reducehaben als Eingabe das Array und eine Funktion, die Sie definieren. Sie ergänzen sich in gewisser Weise: Sie mapkönnen nicht ein einzelnes Element für ein Array mehrerer Elemente zurückgeben, während reduceimmer der Akkumulator zurückgegeben wird, den Sie eventuell geändert haben.
map
Mit mapiterieren 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 accumulatorund abgerufen current_elementwerden:
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.