2017-10-18 7 views
-3
var arr = [1,2,3]; 
var max = arr.reduce(function(a, b) { 
return Math.max(a, b); 
}); 

Je passe par la fonction REDUCE de MDN docs, Dans l'extrait de code ci-dessus, je me demandais ce que fait la fonction (a, b). Comment ça marche? T-il passer par commeArray.prototype.reduire la fonction en JavaScript

function (1,2) 
{ 

} 

function(2,3) 
{ 

} 

function(3,1) 
{ 

} 

J'ai aussi trouvé un exemple qui résume tous les éléments du tableau

var numbers = [0, 1, 2, 3]; 
var result = numbers.reduce(function(accumulator, currentValue) { 
    return accumulator + currentValue; 
},0); 


console.log(result); 

Ainsi, dans l'exemple ci-dessus,

  1. comment une fonction sait-elle instantanément que son premier argument est un accumulateur ??
  2. En première itération, quelle est la valeur de l'accumulateur et la valeur actuelle (je suppose la fonction (0,1))
  3. Que se passe-t-il si je ne donne pas la valeur initiale (ici 0). Cette valeur initiale est-elle quelque chose qui sera stocké dans l'accumulateur au premier itération?

Quelqu'un pourrait m'aider à comprendre cette fonction ???

+3

Avez-vous essayé de lire la documentation de la méthode 'reduce'? Cela répond à vos questions. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a – Barmar

+0

"Je passe par la fonction MDN docs REDUCE" donc je suppose que c'est exact référence. Il semble que la question soit plus "quelle est la mise en oeuvre de" réduire "? Peut être? – msanford

+0

'[1,2,3] .reduce ((a, b) => {console.log (" a & b = ", a, b); retourne Math.max (a, b);})' IOW : (1,2) (2,3) = 3 – Keith

Répondre

2

Comment fonctionne sait instantanément que ce premier argument est un accumulateur

Il incombe à la personne qui écrit la fonction (vous) d'écrire une fonction qui attend le premier argument de être l'accumulateur. Comme le dit la documentation MDN que vous mentionnez, c'est ce que la fonction de réduction passera comme premier argument.

En première itération quelle est la valeur de l'accumulateur et la valeur actuelle

Comme dit la documentation, la première fois qu'il est appelé, l'accumulateur sera mis à la initialValue qui sera le premier élément le tableau si vous ne spécifiez pas autrement.

De même, la valeur actuelle sera la valeur actuelle en cours de traitement dans le tableau.

Qu'arrive-t-il si je ne donne pas la valeur initiale (ici 0)

la documentation Citant vous avez fait référence: Si aucune valeur initiale est fournie, le premier élément du tableau sera être utilisé.

0

Ok, je pense que vous manquez conceptuellement une étape ici. Dans les documents sur MDN, vous remarquerez que la fonction de rappel que vous transmettez à votre fonction réducteur peut accepter jusqu'à 4 arguments (accumulateur, valeur actuelle, indice actuel, réduction de tableau utilisée à l'origine). Généralement, vous verrez le réducteur en utilisant uniquement les arguments d'accumulateur et de valeur actuelle dans la fonction de rappel. L'accumulateur est le résultat accumulé des itérations précédentes, la valeur actuelle est la valeur à l'index sur lequel le réducteur est en cours d'itération.

`` `

// ES6 
const reducer = (accumulator, currentValue) => Math.max(accumulator, currentValue); 

// OR OLDER 
const reducer = function(accumulator, currentValue) { 
    // return whichever is higher 
    return Math.max(accumulator, currentValue); 
} 
const arr = [1,2,3]; 
let result = arr.reduce(reducer, 0); 
// (0, 1) -> (1, 2) -> (2, 3) -> result = 3; 
// more interesting 
const arr_2 = [5, 1, 6, 7, 4, 9, 2, 8]; 
let result_2 = arr_2.reduce(reducer, 0); 
// (0, 5)->(5,1)->(5,6)->(6,7)->(7,4)->(7,9)->(9,2)->(9,8)->result = 9 

La fonction de rappel du réducteur est une fonction de comparaison qui effectue une évaluation sur la base de la valeur accumulée et l'indice courant d'ensemble, puis renvoie le résultat. Array.prototype.reduce utilise cette fonction de rappel avec une valeur de base facultative (0 dans mon exemple) pour réduire le contenu du tableau à une seule valeur.

Par exemple, si vous vouliez ajouter tous les chiffres dans un tableau vous devez:

const arr = [1,2,3]; 
let result = arr.reduce((acc, cur) => cur + acc, 0); 
// (0, 1) -> (1, 2) -> (3, 3) -> result = 6