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 :

Récupérer les valeurs les plus élevées dans un array


Sujet :

JavaScript

  1. #21
    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 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    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 661
    Billets dans le blog
    1
    Par défaut
    Ha oui je vois le souci, c'est le tri alpha et comme c'est un mixte ça va être tricky a résoudre ...


    J'y suis presque...
    j'ai juste un petit souci avec le dernier élément
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    var reg=/[.,]/g;
     
    function mysort(a,b) {
    ta=a.split(reg);
    tal=ta.length;
    while(tal++<maxl){
    ta.push("0");
    }
    tb=b.split(reg);
    tbl=tb.length;
    while(tbl++<maxl){
    tb.push("0");
    }
    l=0,va=0, vb=0;
    while (l++<maxl) {
    va+= +ta[l] * Math.pow(10,l);
    vb+= +tb[l] * Math.pow(10,l);
    }
    return (ta[0] > tb[0] && va > vb)? -1: 1 ;
    }
     
    var i=-1, maxl=0;
    t=["A,1.2.3.0.0.7","A,45.2.3.4","A,306.0.0","A,306.0.0.1","ABBA,86.0.22.1","ABBA,9.0","ABBA,0.0.7.45.12"];
    //determination de la longueur max
    while(t[++i]){
    l=t[i].match(reg).length;
    maxl= (maxl<l)?l:maxl;
    }
     
    t.sort(mysort);
    console.log(t);
    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 !

  2. #22
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    J'ai l'impression que ton tableau n'est pas trié (?)

  3. #23
    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 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    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 661
    Billets dans le blog
    1
    Par défaut
    j'avais en fait le même souci de longueur uniforme sur le premier élement des arrays...

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    var reg=/[.,]/g;
     
    function mysort(a,b) {
    ta=a.split(reg);
    tal=ta.length;
    while(tal++ <maxl){
    ta.push(0);
    }
    tb=b.split(reg);
    tbl=tb.length;
    while(tbl++ <maxl){
    tb.push(0);
    }
     
    l=maxl,va=0, vb=0;
    while (l-- >1) {
    while(ta[0].length<max0){ta[0]+=' '}
    while(tb[0].length<max0){tb[0]+=' '}
     
    va += 1*ta[l] * Math.pow(10,maxl-l);
    vb += 1*tb[l] * Math.pow(10,maxl-l);
    }
     
    return ((ta[0] + va > tb[0] + vb) )? 1: -1 ;
    }
     
    var i=-1, maxl=0, max0=0;
    t=["A,1.2.3.0.0.7","A,45.2.3.4","A,306.0.0","A,306.0.0.1","ABBA,86.0.22.1","ABBA,9.0","ABBA,0.0.7.45.12"];
    //determination de la longueur max
    while(t[++i]){
    tp=t[i].match(reg);
    l=tp.length
    l0=tp[0].length
    maxl= (maxl<l)?l:maxl;
    max0=(l0>max0)?l0:max0;
    }
     
    t.sort(mysort);
    console.log(t);
    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 !

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 6
    Par défaut
    C'est ce que tu veux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [
      'A.6.2.0',
      'A.6.3.0',
      'B.3.2.0',
      'C.4.3.0',
      'C.4.3.1',
      'F.5.6.0',
      'F.5.8.0',
      'G.12.2.0',
      'M.5.0.0',
      'M.5.1.0',
      'R.5.2.1',
      'R.5.4.1'
    ]
    Alors, cela marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function sort(array) {
      return [...array]
        .map((str) => str.match(/[\dA-Z]+/g))
        .map((arr) => arr.map((val) => isNaN(Number(val)) ? val : Number(val)))
        .sort((ARR, arr) => {
          for (let i = 0; i < ARR.length; i++) {
            const [A, a] = [ARR[i], arr[i]];
            if (A > a) { return 1 };
            if (A < a) { return -1 };
          }
          return 0;
        })
        .map((arr) => arr.join('.'));
    }
    Moins obscur que les autres

  5. #25
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Mais ça faussera les résultats avec des chaînes de longueurs différentes...

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2021
    Messages : 6
    Par défaut
    Ah, t'a raison, mais pour quoi mon code ne marche pas pour cette liste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
      'ABBA,81',
      'ABBA,9',
      'ABBA,0'
    ]
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ 'ABBA.0', 'ABBA.9', 'ABBA.81' ]
    Je ne comprends pas

    EDIT Je suis stupide 9 < 81, oui ça marche !

    ______

    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
    23
    24
    25
    26
    27
    28
    const array = ["A,1.2.3.0.0.7", "A,45.2.3.4", "A,306.0.0", "A,306.0.0.1", "ABBA,86.0.22.1", "ABBA,9.0", "ABBA,0.0.7.45.12"];
     
    function sort(array) {
      return [...array]
        .map((str) => str.match(/[\dA-Z]+/g))
        .map((arr) => arr.map((val) => isNaN(Number(val)) ? val : Number(val)))
        .sort((ARR, arr) => {
          for (let i = 0; i < Math.max(ARR.length, arr.length); i++) {
            const [A, a] = [ARR[i], arr[i]].map((val) => val === undefined ? 0 : val);
            if (A > a) { return 1 };
            if (A < a) { return -1 };
          }
          return 0;
        })
        .map((arr) => arr.join('.'));
    }
     
    console.log(sort(array));
    // Résultat :
    [
      'A.1.2.3.0.0.7',
      'A.45.2.3.4',
      'A.306.0.0',
      'A.306.0.0.1',
      'ABBA.0.0.7.45.12',
      'ABBA.9.0',
      'ABBA.86.0.22.1'
    ];
    Ça marche, non ?

  7. #27
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 010
    Par défaut
    Trier le tableau est inutile. La question est de récupérer l'item avec le numéro de version le plus élevé pour chaque préfixe du tableau de départ.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Total valeurs les plus élevées plus valeurs totales dans un TCD
    Par Denis_67 dans le forum Excel
    Réponses: 2
    Dernier message: 03/03/2015, 15h50
  2. [DeskI XiR2] les 10 valeurs les plus élevées
    Par courti01 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/01/2015, 12h54
  3. Récupérer les plus grandes valeurs avec group by
    Par mysticpete dans le forum Doctrine2
    Réponses: 2
    Dernier message: 24/04/2013, 16h09
  4. Réponses: 11
    Dernier message: 04/10/2011, 11h21
  5. trouver la valeur la plus élevée dans un tableau
    Par denis.ws dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 16/05/2008, 08h43

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