IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Ecrire cette méthode autrement pour mieux comprendre


Sujet :

JavaScript

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut Ecrire cette méthode autrement pour mieux comprendre
    bonsoir, voici une méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       addMatiere(newMatiere: Sommaire) {
            newMatiere.id = this._matieres.map(s => s.id)
            .reduce((p, c) => p < c ? c : p) + 1;
            this._matieres.push(newMatiere);
        }
    voici ce que je met en paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addMatiere({id: 0, name:this.nomMatiere});
    je n'arrive pas à expliquer quelles sont les variables qui correspond à p et c ?

    comment expliquer simplement cette méthodes ?

    merci de vos réponses

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    vous pouvez trouver des exemples d'utilisation de "reduce" là :
    https://developer.mozilla.org/fr/doc...x/Array/reduce

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Il nous manque du code pour comprendre.

    addMatiere( newMatiere : Sommaire ) n'est pas du Vanilla JS.

    newMatiere.id = this._matieres.map( s => s.id ).reduce( (p, c) => p < c ? c : p) + 1; : l'objet inconnu this contient l'objet inconnu _matieres qui est sans doute un array puisqu'on lui applique la méthode map() et sur le résultat de map() on applique la méthode reduce().

    La notation arrow s => id est la forme ES2015 de function( s ){ return s.id }.
    La notation arrow (p, c) => p < c ? c : p est la forme ES2015 de function( p, c ){ return p < c ? c : p }.

    reduce( (p, c) => p < c ? c : p) : p et c sont les deux premiers éléments traités.

    Exemple : et total = [ 0, 1, 2, 3 ].reduce( ( a, b ) => a + b, 0 ); // total == 6.

    EDIT : je constate que l'on m'a précédé.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci pour ces réponses, en effet j'ai pas précisé mais c'est de l'angular2 typescript.
    Le but de la chose est d'ajouter un nouveau élément dans l'attribut matieres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    export class SommaireGestionService{
        private _matieres = Sommaire.matieres.slice(0);
     
        addMatiere(newMatiere: Sommaire) {
           console.log(newMatiere); // Objet{ id:0, name:"azeaez"}
            newMatiere.id = this._matieres.map(s => s.id)
            .reduce((p, c) => p < c ? c : p) + 1;
            this._matieres.push(newMatiere);
        }

    cette attribut matière je la récupère depuis une classe qui contient un attribut static:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    export class Sommaire{
     
        id:number;
        name:string;
     
        static matieres:Sommaire[] = [
            { id:1, name: 'Informatique' },
            { id:2, name: 'Electronique' },
            { id:3, name: 'Infographie' },  
            ];
    }
    si j'ajoute un nouveau élément je devais avoir ceci en mémoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            { id:1, name: 'Informatique' },
            { id:2, name: 'Electronique' },
            { id:3, name: 'Infographie' },  
            { id:4, name: 'autre-matiere' },
    dans l'exemple que tu me donnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exemple : et total = [ 0, 1, 2, 3 ].reduce( ( a, b ) => a + b, 0 ); // total == 6.
    si je calle avec ton exemple et avec l'attribut static que j'ai donnée, le total serais de 4 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exemple : et total = [ 1, 2, 3 ].reduce( ( a, b ) => a + b, 0 ); // total == 4.
    que pensez vous de ce code que j'ai essayer de décomposer serai compréhensible ? (et que jai testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        addMatiere(newMatiere: Sommaire) {
            /*
            newMatiere.id = this._matieres.map(s => s.id).reduce((p, c) => p < c ? c : p) + 1;
            console.log(newMatiere.id);
            this._matieres.push(newMatiere);
            */
     
            console.log(newMatiere);
            let recup_cle = this._matieres.map(s => s.id);
            console.log(recup_cle);
            let trouve_max = recup_cle.reduce((temp,valeur_courant)=>temp < valeur_courant ? valeur_courant : temp) + 1;
            console.log(trouve_max);
            newMatiere.id = trouve_max;
            this._matieres.push(newMatiere);
            console.log(this._matieres);
     
        }

    je comprend que réduce ne sert qu'a trouver la valeur maximal de l'index quand la nouvelle matière sera insérer.
    Lorsqu'on utilise map, c'est comme si on faisait un each (on boucle toute la table ) et on récupère les index ?
    On peut coder autrement ? ou que celle ci est la meilleur solution ?

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    je viens de comprendre pouquoi on utilise reduce, j'avais pas pensé à ce cas de figure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    export class Sommaire{
     
     
     
        id:number;
     
        name:string;
     
     
     
        static matieres:Sommaire[] = [
     
            { id:3, name: 'Informatique' },
     
            { id:1, name: 'Electronique' },
     
            { id:0, name: 'Infographie' },  
     
            ];
     
    }
    pour moi je pensais que la donnée id serait rangé par ordre croissant .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MooTools] MooTools lance les JavaScript Challenge pour mieux comprendre le JavaScript de base
    Par vermine dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 16/08/2012, 08h19
  2. Réponses: 3
    Dernier message: 30/01/2010, 11h56
  3. Quel langage pour mieux comprendre la POO?
    Par vg-matrix dans le forum Débuter
    Réponses: 5
    Dernier message: 08/01/2010, 19h17
  4. ecrire cette condition autrement
    Par zalalus dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2009, 14h40
  5. UML des exercices pour mieux comprendre
    Par maa dans le forum Débuter
    Réponses: 6
    Dernier message: 25/08/2008, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo