Reduce à fond la forme 5

reduce 1
reduce 2
reduce 3
reduce 4

Amélioration


const words = [0,2,0,0,6];


let t = words.reduce(function( {max, min}, x) {
   min = Math.min(min,x);
   max = Math.max(max,x);
   return { min, max }
},
{min : Number.MAX_VALUE,
max : Number.MIN_VALUE,
});



const nbOccurences = words.reduce((a, x) => {
   a[x]= a[x]+1;
return a},Array.from({length:t.max+1},()=>0));



Reduce : à fond la forme 4

reduce 1
reduce 2
reduce 3

Améliorations :


const words = [1,2,2,1,5];

let { max, average } = words.reduce(function( {max, min, sum, nb}, x) {

   min = Math.min(min,x);
   max = Math.max(max,x);
   sum = sum + x;
   let average = sum/++nb;

   return { min, max, nb, sum, average, nb }

},
{min : Number.MAX_VALUE,
max : Number.MIN_VALUE,
sum : 0,
average : 0,
nb : 0});

🥷la valeur initiale est un 🥇objet et quel objet !

console.log(average, max);

Reduce : à fond la forme 3

reduce 1
reduce 2

Amélioration

const words = [1,2,2,1,5];


let { min, max } = words.reduce(function( {max, min}, x) {

   min = Math.min(min,x);
   max = Math.max(max,x);

   return { min, max }

},
{min : Number.MAX_VALUE,
max : Number.MIN_VALUE});

🥷la valeur initiale est un objet ! 

console.log(min,max);

Reduce : fond la forme 2


reduce 1

Amélioration :


const words = [1,2,2,1,5];


let { min } = words.reduce(function( {min}, x) {

   min = Math.min(min,x);

   return { min }

},
{min : Number.MAX_VALUE});


🥷la valeur initiale de l'acuumulateur est une objet !


console.log(JSON.stringify(min));

Reduce : à fond la forme

const words = [1,2,2,1,5];

let min = words.reduce(function(acc, x) {

   acc = Math.min(acc,x);

   return acc

},Number.MAX_VALUE);

🥷la valeur initiale est une valeur !


console.log(min);

olet min = words.reduce( (acc, x) => Math.min(acc,x),Number.MAX_VALUE);


code

fonction : objet

Une fonction est un objet qui possède donc des propriétés.

On peut "cacher" des résultats, voici un exemple avec la plus lente fonction de fibonachi

f(n) {
   if (n<= 1) return n;
   return f(n - 1) + f(n - 2);
}

/**
 *                         f(5)
 *                   /              \
 *                f(4)                f(3)
 *             /       \             /    \
 *          f(3)       f(2)        f(2)   f(1)
 *         /    \      /   \       /   \   
 *      f(2)   f(1)  f(1)  f(0)  f(1)  f(0)  
 *      /   \   
 *    f(1) f(0)  

let fib = function (n) {
  if ( fib.cache[n] ) { 
    return fib.cache[n]; 
  } 
  else { 
     if (n<= 1) {
       fib.cache[n] = n
       return n;
       }
     let u = fib(n - 1) + fib(n - 2);
       fib.cache[n] = u; 
       return u;
  }

  return results;
};

fib.cache={};


console.time("appel 1");
console.log(fib(9));
console.timeEnd("appel 1");
console.time("appel 2");
console.log(fib(10));
console.timeEnd("appel 2");
code

P.S. pas de récursif pour fibo dans tous les cas.
Ecrire un programme pour intégrer des vidéos