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 :

Ma façon de dédoublonner VS lodash


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Gobble
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Octobre 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 100
    Par défaut Ma façon de dédoublonner VS lodash
    Ma façon de dédoublonner un array en js, trivial on dirait quand on regarde la façon d'écrire de lodash pour un même résultat, avouez que c'est moins lisible mais au niveau algo c'est + performant :



    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
    function removeDuplicate(arr = []){
     
        const { length } = arr;
     
        for(let i= 0 ;i < length; i++){
     
            for(let y= i+1;y < length; y++){
     
               if(arr[y] == arr[i]){
     
                    arr.splice(y,1);
                    y--;
                }
     
            }
     
        }
        return arr;
     
    }
    la façon de lodash :

    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
    function eq(value, other) {
        return value === other || (value !== value && other !== other)
    }
     
    function baseSortedUniq(array, iteratee) {
        let seen
        let index = -1
        let resIndex = 0
     
        const { length } = array
        const result = []
     
        while (++index < length) {
            const value = array[index], computed = iteratee ? iteratee(value) : value
     
            if (!index || !eq(computed, seen)) {
                seen = computed
                result[resIndex++] = value === 0 ? 0 : value
            }
        }
        return result
    }
    la façon ES6 en utilisant Set

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var arr = [1,2,3,4,1,2,3,1,2,3]
     
    var uniqueArr = [...new Set(arr)]
     
    console.log(uniqueArr)

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    A tester, peut-être plus rapide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let arr = [1,2,3,4,1,2,3,1,2,3];
    let tmp=[];
    let i=-1;
    while (arr[++i]){
    !tmp.includes(arr[i]) && tmp.push(arr[i]);
    }
    console.log(tmp);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre expérimenté Avatar de Gobble
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Octobre 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 100
    Par défaut
    Ta méthode semble en effet plus rapide !

    Après il y a aussi la méthode filter qui est sympa j'ai trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const filteredArr = arr.filter( (el, pos) => arr.indexOf(ele) == pos );
    mais le plus performant est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var arr = [1,2,3,4,1,2,3,1,2,3]
     
    var uniqueArr = [...new Set(arr)]
     
    console.log(uniqueArr)

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    il y a une petit coquille dans ton filter ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arruniq =arr.filter((x, i, a) => a.indexOf(x) == i)
    sinon la librairie underscore propose aussi un _.uniq
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre expérimenté Avatar de Gobble
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Octobre 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 100
    Par défaut
    En effet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const filteredArr = arr.filter( (el, pos) => arr.indexOf(el) == pos );

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    on a eu, il n'y a pas longtemps sur le forum jQuery, une discussion sur ce sujet : Que vaut la fonction qui classe et enlève les doublons d'un tableau ?

    Au post #2 j'aivais fourni une réponse qui reprend effectivement ce qui est mentionné ici.

    Une remarque quand même concernant ta première façon de faire, il me semble que de mettre en cache la longueur du tableau à parcourir, const { length } = arr t'expose à des effets de bord attendu que tu es amené à réduire la longueur de celui-ci du fait du arr.splice(y,1).
    Tu pourrais donc être amené à vérifier un undefined == undefined et donc décrémenter ton y, et là cela va boucler

Discussions similaires

  1. [MySQL] Afficher un enregistrement de façon aléatoire
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/02/2005, 19h36
  2. [JSP-Servlet] Conseils sur façon de coder
    Par gunnm dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 09/12/2004, 20h57
  3. problème que je n'arrive pas à résoudre de façon récursive
    Par miam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/07/2004, 11h21
  4. [algo]Dédoublonnement
    Par maxvador dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 11/07/2003, 10h01
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

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