Pages

algo

 >>> separe([1, 0, 1, 0, 1, 0, 1, 0]) 

[0, 0, 0, 0, 1, 1, 1, 1]

Algo 1


🤡Algo 2


😡Algo 3


Algo 4

filtre and co 3

const products = [

  {
    "_id": 1,
    "item": "abc",
    "price": 10,
    "quantity": 2,
    "date": "2014-03-01T08:00:00.000Z"
  },
  {
    "_id": 2,
    "item": "jkl",
    "price": 20,
    "quantity": 1,
    "date": "2014-03-01T09:00:00.000Z"
  },
  {
    "_id": 3,
    "item": "xyz",
    "price": 5,
    "quantity": 10,
    "date": "2014-03-15T09:00:00.000Z"
  },
  {
    "_id": 4,
    "item": "xyz",
    "price": 5,
    "quantity": 20,
    "date": "2014-04-04T11:21:39.736Z"
  },
  {
    "_id": 5,
    "item": "abc",
    "price": 10,
    "quantity": 10,
    "date": "2014-04-04T21:23:13.331Z"
  },
  {
    "_id": 6,
    "item": "def",
    "price": 7.5,
    "quantity": 5,
    "date": "2015-06-04T05:08:13.000Z"
  },
  {
    "_id": 7,
    "item": "def",
    "price": 7.5,
    "quantity": 10,
    "date": "2015-09-10T08:43:00.000Z"
  },
  {
    "_id": 8,
    "item": "abc",
    "price": 10,
    "quantity": 5,
    "date": "2016-02-06T20:20:13.000Z"
  }
]

function date(min,max){

  return function( {date} ){
    if (new Date(min) <= new Date(date) && new Date(date) <= new Date(max)) {return true}
    else {return false}
  }


}


const myagg = function(acc, cur)  {
  if (!acc[cur.item]) acc[cur.item] = 0;
  acc[cur.item]+=cur.price*cur.quantity;
  return acc
}

const filtre = products.filter(date('2014-01-01','2015-01-01'))
                       .reduce( myagg,{})

console.log(filtre)

const result = []
for (const [key, value] of Object.entries(filtre)) {
  // console.log(`${key}, ${value}`);
  result.push(
    {
      "_id": key,
      "totalSaleAmount": value
    }
  )
}
console.table(result)

filtre and co 2

function date(min,max){
  return function( {date} ){
    if (new Date(min) <= new Date(date) && new Date(date) <= new Date(max)) {return true}
    else {return false}
  }
}

const myagg = function(acc, cur)  {
  if (!acc[cur.item]) acc[cur.item] = 0;
  acc[cur.item]+=cur.price*cur.quantity;
  return acc
}

const filtre = products.filter(date('2014-01-01','2015-01-01'))
                       .reduce( myagg,{})
console.log(filtre)


code 

filtre & co 1

 const products = [

  {
    "_id": 1,
    "item": "abc",
    "price": 10,
    "quantity": 2,
    "date": "2014-03-01T08:00:00.000Z"
  },
  {
    "_id": 2,
    "item": "jkl",
    "price": 20,
    "quantity": 1,
    "date": "2014-03-01T09:00:00.000Z"
  },
  {
    "_id": 3,
    "item": "xyz",
    "price": 5,
    "quantity": 10,
    "date": "2014-03-15T09:00:00.000Z"
  },
  {
    "_id": 4,
    "item": "xyz",
    "price": 5,
    "quantity": 20,
    "date": "2014-04-04T11:21:39.736Z"
  },
  {
    "_id": 5,
    "item": "abc",
    "price": 10,
    "quantity": 10,
    "date": "2014-04-04T21:23:13.331Z"
  },
  {
    "_id": 6,
    "item": "def",
    "price": 7.5,
    "quantity": 5,
    "date": "2015-06-04T05:08:13.000Z"
  },
  {
    "_id": 7,
    "item": "def",
    "price": 7.5,
    "quantity": 10,
    "date": "2015-09-10T08:43:00.000Z"
  },
  {
    "_id": 8,
    "item": "abc",
    "price": 10,
    "quantity": 5,
    "date": "2016-02-06T20:20:13.000Z"
  }
]

function date(min,max){

  return function( {date} ){
    if (new Date(min) <= new Date(date) && new Date(date) <= new Date(max)) {return true}
    else {return false}
  }


}

const filtre = products.filter(date('2014-04-01','2015-01-01'))

Adetruire

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        html {

            scroll-behavior: smooth;

        }


        #partie_definition {

            background-color: yellow;

        }

    </style>

</head>


<body>

    <a href="./About/aboutme.html">About me</a>

    <a href="https://www.ibisc.univ-evry.fr/~dupont/" target="_blank">Dupont</a>

    <a href="./Images/47.jpg" download>me</a>

    <a href="#partie_definition">definition</a>

    <a href="mailto:denis.dupont@univ.fr">email</a>

    <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nesciunt quae a earum minus officia. Quam, neque? Ea

        nulla nisi dolore laudantium quia tenetur saepe maiores veniam consequuntur vel ab fugit 

        consectetur, ex quasi distinctio nihil laborum consequuntur animi qui! Fuga repudiandae necessitatibus

        reiciendis fugiat eos cumque!</p>

    <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Saepe exercitationem incidunt quam at beatae adipisci

        aspernatur error et, odio itaque nam mollitia voluptas veritatis eveniet odit excepturi temporibus accusantiu

        aspernatur vel eum cum porro numquam magni. Ipsum harum dolorum nisi deleniti blanditiis fugiat pariatur aut

        ipsa nesciunt dolore! Autem cumque dignissimos saepe nihil eveniet sequi soluta pariatur dolor neque?</p>

    <p id="partie_definition">Lorem ipsum dolor sit amet consectetur adipisicing elit. Iste provident repellendus ipsam.

        Eos mollitia



        veritatis praesentium temporibus! Velit beatae incidunt voluptatum sunt, culpa laboriosam quia fuga at.</p>


    <a href="#">Top</a>

</body>


</html> 

filtre, map ...

Le chaînage des filtres élémentaires

const population = [

    { nom: "Dupont"ville: "evry"sex: "f"born: 1970 },
    { nom: "Dupont"ville: "Paris"sex: "f"born: 1980 },
    { nom: "Brusel"ville: "belfort"sex: "h"born: 1969 },
    { nom: "SuperDupont"ville: "Evry"sex: "f"born: 1971 },
    { nom: "Leroy"ville: "Paris"sex: "f"born: 1984 },
    { nom: "Tony"ville: "belfort"sex: "h"born: 2000 },

];

//definitions pour filtre

const setAge = (pers=> {
    let age = new Date().getFullYear() - pers.born;
    return Object.assign(pers, { age });
}
const people = population.map(setAge),
femme = {
     genre: "f"
},
     homme = {
        genre: "h"
     },
     cinquante = {
        age: 50,
    },
    quarante = {
        age: 40,
    },
    Évryens = {
        ville: "evry",
    },

    genre = function ({ sex }) {
        return sex == this.genre;
    },

    trancheAge = function ({ age }) {
        return age > this.age;
    },

    habitant = function ({ ville }) {
        return ville.toLowerCase() == this.ville.toLowerCase();
    },


// on peut filtrer maintenant sans effort
    
    f50 = people.filter(genrefemme)
         .filter(trancheAgecinquante),

    h50 = people.filter(genrehomme)
         .filter(trancheAgequarante),

evryC19 = people.filter(habitantÉvryens)
        .filter(trancheAgecinquante)
         .filter(genrehomme);

 lien


Les filtres dans un tableaux !

Il est intéressant de mettre des fonctions dans des tableaux :
  1. const pipeline = [
  2.   function A,
  3.   function B, ...
  4. ];
  5. for( let action of pipeline) {
  6.    objet = action( objet );
  7. }
L'intérêt du code est en lig. 6 : Chaque actions renvoie l'objet pour l'action suivante.

👿Cette technique est à la base des filtres de Photoshop.

Voici un exemple de chainage d'actions sur un point. Code

Appliquons ce principe sur nos filtres avec la géniale utilisation de la méthode every en lig.2.
  1. const customFilter = (array, ...queries=> {
  2.    return array.filter( pers => queries.every( query => query(pers) ));
  3. },
  4.         
  5. resultQuery = customFilter(population,
  6.             ( { nom } ) => nom == "SuperDupont",
  7.             ( { born } ) => new Date().getFullYear() - born > 40,
  8.             ( { sex  } ) => sex == "f",
  9.             ( { ville} ) => ville == "evry"
  10.         );



👍 Améliorations

  1. const customFilter = (array, ...tests) => {
  2.     return array.filter(pers => tests.every(t => t(pers)));
  3. }

  4. const filtre = (query) =>
  5. customFilter(population,
  6.      ( {nom} )    => query.nom ? nom.toLowerCase() == query.nom : true,
  7.      ( { born } ) => query.born ? new Date().getFullYear() - born > query.born : true,
  8.      ( { sex }  ) => query.sex ? sex == query.sex : true,
  9.      ( { ville }) => query.ville ? ville.toLowerCase() == query.ville : true
  10. );

  11. const firstQuery = {
  12.    nom:"dupont",
  13.    born:40,
  14.    sex:"f",
  15.    ville:"paris",
  16. }

  17. console.log(filtre (firstQuery))

  18. const Evryens = {
  19.    ville:"evry",
  20. }

  21. console.log(filtre (Evryens))

                                                  💪A step futher, 

                                                  Pour ceux qui n'auraient pas lu " avoid using bind "

                                                  notez lig.7 la présence de bind.


                                                  1. nom =   function ( {nom} )  { return nom.toLowerCase() == this.nom },
                                                  2. age =   function ( { born } ) { return new Date().getFullYear() - born > this.born},
                                                  3. genre = function ( { sex }  ) { return sex == this.sex},
                                                  4. habite =function ( { ville }) { return ville.toLowerCase() == this.ville},

                                                  5. customFilter = (array, query, ...tests) => {
                                                  6.     return array.filter(pers => tests.every(t => t.bind(query)(pers)));
                                                  7. }

                                                  8. const myQuery = {
                                                  9.    nom:"dupont",
                                                  10.    born:40,
                                                  11.    sex:"f",
                                                  12.    ville:"paris",  
                                                  13. }
                                                  14. const query1 = customFilter(population, myQuery, nom,age,genre,habite);
                                                  15. console.log(query1);

                                                  16. const query2 = customFilter(population, myQuery, habite);
                                                  17. console.log(query2)