2020

Switch case en action

voici le test pour rechercher dans un string les caractère < ou >
  1.     switch (string.charCodeAt(index)) {
  2.        case 60: // <
  3.         escape = '&lt;';
  4.         break;
  5.       case 62: // >
  6.         escape = '&gt;';
  7.         break;
  8.       default:
  9.         continue;
  10.     }
code

module

ES6

  1. // List of the characters to escape 
  2. const chars = {
  3.     ">": "&gt;",
  4.     "<": "&lt;",
  5. };

  6. //  RegExp from the `chars` object
  7. const re = new RegExp(Object.keys(chars).join("|"), "g");

  8. // Return the escaped string
  9. const escapeHtml = (str = "") => String(str).replace(re, match => chars[match]);

  10. console.dir( escapeHtml('<div>'));


Filtre


  1. const filter = 

  2.   (fx, array) => array.reduce(

  3.     (acc, item) => fx(item) ? acc.concat(item) : acc, 

  4.   []);

  5. const greaterThan4 = (x) => x >= 4;

  6. const data   = [0, 1, 2, 3, 4, 5];

  7. let result = filter(greaterThan4, data);


code

VS et module pour node

J'aimerais utiliser The lodash method _.partition exported as a Node.js module.


Ainsi, ouvrez un terminal et comme l'indique la documentation tapez
npm i --save lodash.partition puis tapez Entrée (return).

on peut ensuite ajouter, en début de fichier, le module

let partition = require('lodash.partition');


code

let partition = require('lodash.partition');

let users = [
  { 'user': 'barney''age': 36'active': false },
  { 'user': 'fred''age': 40'active': true },
  { 'user': 'pebbles''age': 1'active': false }
];

let u = partition(usersfunction (o) { return o.active; });
console.dir(u);

$ node app.js (le nom de votre fichier) [ [ { user: 'fred', age: 40, active: true } ], [ { user: 'barney', age: 36, active: false }, { user: 'pebbles', age: 1, active: false } ] ]

Intégration dans un fichier


  <script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>


let arr = [8, null, 32, 'foo', NaN, 'bar', false, {}, 64, 128];
let parts = _.partition(arr, (el) => {
        return typeof el === 'number' && !_.isNaN(el);
    });
console.log(parts[0]); // [8, 32, 64, 128]


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