web-dev-qa-db-fra.com

Principale différence entre `map` et` reduction`

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.

36
Nishant Dixit

Source

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.

98
Ionică Bizău

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.

7
tadman

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
3
patelarpan

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.

1
Joe Iddon