J'ai utilisé les deux méthodes, mais je suis assez confus quant à l'utilisation de ces deux méthodes.
Est-ce que tout ce que map
peut faire mais que reduce
ne peut pas et vice versa?
Remarque: je sais comment utiliser les deux méthodes que je mets en doute en ce qui concerne la principale différence entre ces méthodes et le moment auquel nous devons l’utiliser.
map
et reduce
ont tous deux en entrée le tableau et une fonction que vous définissez. Ils sont en quelque sorte complémentaires: map
ne peut pas renvoyer un seul élément pour un tableau de plusieurs éléments, tandis que reduce
renverra toujours l'accumulateur que vous avez éventuellement changé.
map
En utilisant map
, vous répétez les éléments et, pour chaque élément, vous retournez l’élément souhaité.
Par exemple, si vous avez un tableau de nombres et que vous voulez obtenir leurs carrés, vous pouvez le faire:
// A function which calculates the square
const square = x => x * x
// Use `map` to get the square of each number
console.log([1, 2, 3, 4, 5].map(square))
reduce
En utilisant un tableau comme entrée, vous pouvez obtenir un seul élément (disons un objet, un nombre ou un autre tableau) en fonction de la fonction de rappel (le premier argument) qui obtient le accumulator
et le current_element
paramètres:
const numbers = [1, 2, 3, 4, 5]
// Calculate the sum
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0)) // < Start with 0
// Calculate the product
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1)) // < Start with 1
Lequel devriez-vous choisir quand vous pouvez faire la même chose avec les deux? Essayez d'imaginer à quoi ressemble le code. Pour l'exemple fourni, vous pouvez calculer le tableau de carrés comme vous l'avez mentionné, en utilisant reduce
:
// Using reduce
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.Push(current*current);
return acc;
}, [])
// Using map
[1, 2, 3, 4, 5].map(x => x * x)
Maintenant, en regardant cela, évidemment, la deuxième mise en œuvre est meilleure et plus courte. Habituellement, vous choisiriez la solution de nettoyage, qui dans ce cas est map
. Bien sûr, vous pouvez le faire avec reduce
, mais en un mot, pensez ce qui serait plus court et finalement ce serait mieux.
En règle générale, "mappage" signifie convertir une série d'entrées en une série de sorties égale, tandis que "réduire" signifie convertir une série d'entrées en un nombre plus petit de sorties.
Ce que les gens entendent par "carte-réduction" est généralement interprété comme signifiant "transformer, éventuellement en parallèle, combiner en série".
Lorsque vous "mappez", vous écrivez une fonction qui transforme x
avec f(x)
en une nouvelle valeur x1
. Quand vous "réduisez" vous écrivez une fonction g(y)
qui prend un tableau y
et émet un tableau y1
. Ils travaillent sur différents types de données et produisent des résultats différents.
laisser regarder deux de celui-ci un par un
Map Map accepte un rappel et l'exécute pour tous les éléments du tableau, mais ce qui le rend unique est-il génère un nouveau tableau en fonction de votre tableau existant .
var arr = [1, 2, 3];
var mapped = arr.map(function(elem) {
return elem * 10;
})
console.log(mapped); // it genrate new array
Réduire La méthode de réduction de l'objet tableau est utilisée pour réduire le tableau à une valeur unique .
var arr = [1, 2, 3];
var sum = arr.reduce(function(sum, elem){
return sum + elem;
})
console.log(sum) // reduce the array to one single value
La fonction map()
renvoie un nouveau tableau en passant une fonction sur chaque élément du tableau en entrée.
Ceci diffère de reduce()
qui prend un tableau et une fonction de la même manière, mais la fonction prend des entrées 2
- un accumulateur et une valeur actuelle.
Donc, reduce()
pourrait être utilisé comme map()
si vous avez toujours .concat
Sur l'accumulateur lors de la sortie suivante d'une fonction. Cependant, il est plus couramment utilisé pour réduire les dimensions d'un tableau, il est donc possible de prendre une dimension et de renvoyer une valeur unique ou d'aplatir un tableau à deux dimensions, etc.