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 :

Tri en fonction d'une donnée avec l'indice pour résultat


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Tri en fonction d'une donnée avec l'indice pour résultat
    J'ai un tableau distance[i] ou je veux obtenir les indices i triés en fonction de la distance.Par exemple:
    distance[1]=100
    distance[2]=50
    distance[3]=70

    et je voudrais recuperer un tri croissant me donnant le nouvel ordre des indices: 2,3,1 (dont les distances sont 50,70,100)

    J'ai essayé distance.sort(), mais cette fonction me donne une nouvelle liste en creant de nouveaux indices, et je perd donc les anciens:
    distance[1]=50
    ....

    donc ma question est: comment faire pour recuperer une liste d'indices ordonnées par les valeurs de distance?

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    en passant pas un second array cette fois à deux dimensions et une fonction sort personalisée...
    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
     
    var distance=new Array();
    distance[0]=150;
    distance[1]=100;
    distance[2]=50;
    distance[3]=70;
     
    var i=-1;
    temp=new Array();
    while(distance[++i]){
        temp[i]=new Array();
        temp[i][0]=i;
        temp[i][1]=distance[i];
    }
     
    function indexsort(a,b){
        return (a[1]>b[1])?1:-1;
    }
     
    temp.sort(indexsort);
    max=temp.length-1;
    alert("indexe distance mini "+temp[0][0]+"\nindexe distance max "+temp[max][0])
    http://jsfiddle.net/GEtXL/
    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
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ou plus simplement avec la méthode map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var distance=[150,100,50,70];
     
    var tri = distance
                .map(function(e,i){ return {index:i, value:e}; })
                .sort(function(a,b){ return a.value-b.value; })
                .map(function(e,i){ return e.index; });
     
    document.write(tri.join(','));
    One Web to rule them all

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    attention .map supporté a partir de ie9
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  5. #5
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 119
    Points : 203
    Points
    203
    Billets dans le blog
    1
    Par défaut
    Vous avez besoin de l index et de la distance dans ce cas
    et sans utiliser ECMA 5
    je vous propose quelque chose comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var distance=[
                          {index:0 , value:150},
                         {index:1 , value:100},
                           {index:2 , value:50}
                          ]
                          .sort(function(a,b){return a.value>b.value})
     
       //distance[0].index=2;distance[0].value=50

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/08/2007, 19h18
  2. Récupérer une donnée avec MsgBox
    Par gentoo dans le forum Access
    Réponses: 5
    Dernier message: 29/01/2007, 16h19
  3. Modifier l'État en fonction d'une donnée dans la base
    Par Pyrocyborg dans le forum Access
    Réponses: 1
    Dernier message: 30/06/2006, 18h40
  4. Recupérer une donnée avec un WHERE concernant la date
    Par benlasavate dans le forum Access
    Réponses: 1
    Dernier message: 23/01/2006, 08h18
  5. [FOP] Changer le bckground en fonction d'une donnée
    Par lasconic dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/02/2005, 16h59

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