Array reduce

Avant d’aborder quelques exemples sur le sujet, faisons une petite synthèse de la méthode reduce, en exposant ses différents paramètres.

Définition

La méthode reduce applique une opération à chaque éléments d’un tableau.
Le résultat est stocké dans un accumulateur.

Qu’est ce qu’un accumulateur?
Nous savons que reduce s’applique sur un tableau initial qui contient sa propre liste de données.
A chaque itérations, la dernière valeur précédemment calculé est accumulé.
Le résultat final sera la dernière valeur calculé par le dernier appel de la fonction callback.

Syntaxe

array.reduce(callback,valeurInitiale[Facultatif])

Paramètres

Callback : La fonction de callback est le premier paramètre.
Celui ci se décline en 4 autres paramètres :

    1. Accumulateur
      Valeur finale à retourner
    2. Elément courant
      Valeur de l’élément courant du tableau d’origine
    3. Indice de l’élément courant [Facultatif]
      Indice de la valeur de l’élément courant du tableau d’origine.
    4. Le tableau d’origine [Facultatif]
      Le tableau d’origine sur lequel on a appelé la méthode reduce.

Valeur initiale [Facultatif]
Si la valeur initiale est fourni, alors reduce exécutera la fonction de callback à partir de l’indice 0.
Si au contraire la valeur initial n’est pas fourni, alors reduce exécutera la fonction de callback à partir de l’indice 1, (l’indice 0 sera considéré comme valeur initiale)

Exemples

    • Somme d’un tableau (reduce sans valeur initial en paramètre)
       
      var array = [2,4,6,8] 
      var result = array.reduce((accumulator,currentItem)=>accumulator+currentItem)
      //Output : 20 
      
    • Somme d’un tableau (reduce avec valeur initial)
       
      var array = [2,4,6,8]
      var initialValue = 100
      var result = array.reduce((accumulator,currentItem)=>accumulator+currentItem,InitialValue) 
      //Output : 120 
      
    • Dernier fichier d’un repertoire.
      Récupérons le fichier le plus récent d’un répertoire MyFolder.

      //GetMaxFile Get most recent file stored in MyFolder
      function GetMaxFile(){
      var files = fs.readdirSync(MyFolder)
      return files.reduce((item,max)=>item>max?item:max)
      }
      
    • Suites de Fibonacci
       
      function Fibonacci(sequenceSize){
          return new Array(sequenceSize).fill(0).reduce(
           (arr,_,i)=>{arr.push((i<=1)?i:arr[i-2]+arr[i-1])
           return arr},[])
          );
      }
      
      console.log(Fibonacci(7))
      //Output : [0,1,1,2,3,5,8]
      

      Suite Fibonacci 2

       
      function Fibonacci_1(sequenceSize){ 
      const fibo = new Array(sequenceSize).fill(0) fibo.reduce((_,__,i)=>(fibo[i]=(i<=1)?i:fibo[i-2]+fibo[i-1])) 
      return fibo 
      } 
      

Note : Les caractères simples, et doubles underscores (parfois mis en paramètre des callback) illustrent le fait que je  survole ces paramètres.

Leave a Reply

Your email address will not be published. Required fields are marked *