Reduce for ever

Nous allons tenter de comparer l’efficacité de différents code pour l'obtention des valeurs Min, Max et la somme des nombre d'un tableau.

Nous commençons par définir un immense tableau data de 50000 objets.
  1. const data = [];
  2. const random = (min, max) => Math.floor(Math.random() * (max - min)) + min;
  3. for (let i = 0; i < 50000; i++) {
  4.     data.push({ x: random(11000000) });
  5. }

Reduce

Nous pouvons réduire le tableau à un objet contenant les valeurs :
  1. console.time("reduce");   
  2. let {min, max, sum} = data.reduce(function( {max, min, sum}, {x}) {

  3.     min = Math.min(min,x);
  4.     max = Math.max(max,x);
  5.     sum = sum + x;
  6.     return { min, max, sum}
  7.  },
  8.  {min : Number.MAX_VALUE,
  9.  max : Number.MIN_VALUE,
  10.  sum : 0
  11.  });
  12. console.timeEnd("reduce");

  13. console.log( min, max, sum );

Autre

Nous utilisons ici la méthode map qui transforme le tableau d'objets en tableaux de valeurs


  1. console.time("map");    
  2. const mapData = data.map(i => i.x);
  3. const maxData = Math.max(...mapData);
  4. const minData = Math.min(...mapData);
  5. for (let i = 0, sum = 0; i < data.length; sum += data[i++]);
  6. console.timeEnd("map");
  7. console.log(minData,maxData,sum);

Résultats de la comparaison

$ node comparaisonMin.js reduce: 12.563ms 15 999996 24956286473 map: 24.679ms 15 999996 24956286473 $ node comparaisonMin.js reduce: 16.015ms 5 999997 25029524292 map: 26.572ms 5 999997 25029524292