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

  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 100
    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 100
    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 !

  7. #7
    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
    en gros il serait donc plus rapide de faire des requetes ajax pour laisser op�rer le tri par mysql que de vouloir tout charger cot� client et faire les tris en javascript
    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 !

  8. #8
    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
    Effectivement, faut que je r�fl�chisse encore a tout ca.
    Je voulais �viter les requ�tes mais si c'est plus rapide.
    Merci pour les r�ponses messieurs.

+ 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