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 d'object JSON en JS


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut Tri d'object JSON en JS
    Bonjour,

    Après pleins de recherches infructueuses, j'epère que l'un d'entre vous pourra m'aider.

    J'aimerais comprendre comment faire un trie ASC ou DESC sur l'un des
    tableau de valeurs(par ex trie par prenom ou nom...) dans un objet qui à la forme suivante (j'ai réduit les données pour plus de clarté):

    Ceci est le texte JSON sur lequel je fait un eval
    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
    var data = eval(JSON_string);
     
    {
    	"nom": {
    		"values": ["DESCAMPS", "LEONHART"],
    		"visible": true
    	},
    	"prenom": {
    		"values": ["Nicolas", "Didier"],
    		"visible": true
    	},
    	"fonction": {
    		"values": ["Administrateur", "Directeur"],
    		"visible": true
    	},
     
    	"cpostal": {
    		"values": ["75012", "75012"],
    		"visible": true
    	},
    	"ville": {
    		"values": ["Paris", "Paris"],
    		"visible": true
    	},
    	"pays": {
    		"values": ["France", "France"],
    		"visible": true
    	},
    	"groupe": {
    		"values": ["001", "002"],
    		"visible": true
    	}
    }
    Par avance merci

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    tri sur ? nom prénom ?
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Oui, je souhaite faire un trie par exemple par prenom, mon object deviendrait alors :



    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 data = {
    	"nom": {
    		"values": ["LEONHART", "DESCAMPS"],
    		"visible": true
    	},
    	"prenom": {
    		"values": ["Didier", "Nicolas"],
    		"visible": true
    	},
    	"fonction": {
    		"values": ["Directeur", "Administrateur"],
    		"visible": true
    	},
     
    	"cpostal": {
    		"values": ["75012", "75012"],
    		"visible": true
    	},
    	"ville": {
    		"values": ["Paris", "Paris"],
    		"visible": true
    	},
    	"pays": {
    		"values": ["France", "France"],
    		"visible": true
    	},
    	"groupe": {
    		"values": ["002", "001"],
    		"visible": true
    	}
    }
    Comme si je fesait un

    data[prenom].values.sort();
    Sauf que les autres tableaux values suivent aussi le trie

  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 659
    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 659
    Billets dans le blog
    1
    Par défaut
    heu vu que tu fais un eval du json...
    je suppose qu'il est généré dynamiquement, genre par php mysql et qu'il est donc issu d'une requête mysql?

    je te conseillerais fort de faire le tri coté serveur directement au moment de la requête ?
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Oui ces données viennent bien sur de requete SQL via de l'ajax.
    Ça serait un peu long d'expliquer tout le bazar mais disons que le but est lire toutes les données une fois, puis ensuite d'effectué les tries et/ou filtres en JS histoire de ne pas relancer des requêtes SQL sans arrêt.
    J'ai choisi ce principe car les données reçu sont destinées a être afficher en HTML mais aussi en PDF et en XLS.
    Donc si par exemple je reçois de SQL 4000 lignes, je vais bien sur faire une pagination en HTML mais le fichier XLS doit avoir les 4000 lignes dispo.
    Et si l'utilisateur veut trier par prénom ou nom je doit donc trier les 4000 lignes.
    Tu vois ce que je veut dire ?

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut,
    renseigne-toi sur la methode Array.sort() et sa fonction de callback optionnelle. Mais même avec ceci, ça risque d’être assez coûteux en temps d’exécution car les navigateurs ne sont pas optimisés pour le tri relationnel.
    À chaque comparaison, il va falloir invoquer Array.indexOf() (méthode à redéfinir pour qu’elle soit cross-browser) deux fois pour retrouver l’index des éléments du tableau à trier, puis explorer l’objet data pour aller comparer les valeurs du tableau de référence aux index correspondants.

    Sachant que chez Mozilla, l’algorithme de indexOf() est une recherche linéaire (et on ne peut pas faire mieux car a priori le tableau n’est pas trié), que l’algorithme le plus utilisé pour sort() est le quicksort qui peut effectuer au pire n² comparaisons, ça va aller chercher dans les 2n^3 ce qui, sur 4000 entrées, va demander quelques 128 milliards d’opérations. Ourf !
    Ce que le SQL ne fait pas, car il a déjà les index en mémoire, ou même ne passe même pas par des index, et n’a donc pas besoin de méthode style indexOf().

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/10/2008, 11h08
  2. Tri d'un arrayList d'Object[]
    Par Lex92 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/09/2008, 16h47
  3. Réponses: 3
    Dernier message: 08/02/2008, 20h02
  4. Réponses: 11
    Dernier message: 28/08/2007, 12h06
  5. [POO] Erreur Trying to get property of non-object
    Par Niouts dans le forum Langage
    Réponses: 14
    Dernier message: 13/09/2006, 10h09

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