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 :

Sélectionner la dernière valeur d'un objet JSON ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut Sélectionner la dernière valeur d'un objet JSON ?
    Bonjour à tous,

    Je cherche la manière la plus éfficace pour sélectionner les dernières valeurs de tableaux dans un objet JSON dont je ne connais pas les index à l'avance (le JSON est généré d'un tableau PHP)

    Exemple de JSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "panier1": {
    	"0": "poire",
    	"1": "banane",
    	"2": "abricot"
       	},
     
    "panier2": {
    	"0": "ananas",
    	"1": "cerise"
       	}
    }
    Dans cet exemple, je veux sélectionner "abricot" de panier1 et "cerise" de panier2

    Je peux :

    - Compter le nombre de valeur présentes dans chaque panier et sélectionner pour chaque panier la valeur trouvée (méthode peu économe car il faut à chaque fois parcourir tous les paniers, quand il y a beaucoup de valeurs :S)

    - Insérer une clé "max" pour chaque panier (clé que j'insère pendant la création de l'objet en PHP) et ainsi avoir la bonne clé pour chaque panier sans avoir à compter le nombre de valeur

    Merci pour votre aide !

  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 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    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 foo={
    "panier1": {
    	"0": "poire",
    	"1": "banane",
    	"2": "abricot"
       	},
     
    "panier2": {
    	"0": "ananas",
    	"1": "cerise"
       	}
    }
     
    for (elt in foo){
    alert(getlast(foo[elt]))
    }
     
    function getlast(obj){
    var last
    for (elt in obj){ last=obj[elt] }
    return last
    }
    mais bon c'est pas optimum vu que ça boucle sur tous les elements poru retourner le dernier
    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 du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta solution SpaceFrog je vais la garder si je trouve pas mieux

    La solution de stocker les valeurs max pour chaque tableau va faire grossir l'objet JSON donc je ne sais pas si c'est forcément mieux au final :S

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Etant donné que les clés de chaque panier sont numériques, il serait plus judicieux de passer par un array que par un object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var foo={
    "panier1": ["poire", "banane", "abricot"],
     
    "panier2": ["ananas", "cerise"]
    }
    et ainsi, chaque panier disposerait d'une propriété length adaptée.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    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 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    sinon il doit bien trainer une lib json qui traine avec des methodes first last length ?

    seka ? locé ? remy ?
    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 !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta solution Bovino je vais essayer d'appliquer ca

    @SpaceFrog je ne sais pas du tout

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par SpaceFrog
    sinon il doit bien trainer une lib json qui traine avec des methodes first last length ?

    seka ? locé ? remy ?
    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var objet = {'toto':'tata', 'toto2':'tata2', 'hello':'world','foo':'bar'};
    var i = 0, prop;
    for(prop in objet){
        if(i===0){
            objet.first = prop;
        }
        i++;
        objet.length = i;
        objet.last = prop;
    }
    alert(objet.length+'\nPremier : '+objet[objet.first]+'\nDernier : '+objet[objet.last]);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    @Bovino En fait la première technique que tu m'as donné en convertissant l'objet en array me semble la meilleure. J'avais parfois des trous dans mon objet ("0":"fraise","1":"melon","3":"pasteque") que je devais normalement éviter mais que je comblais avec une fonction JS, donc ça me forcera à vérifier l'intégrité de mes données et j’allégerais mon JSON par la même occas

    Donc pour moi c'est parfait Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci je mets le sujet résolu.

  10. #10
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sinon il doit bien trainer une lib json qui traine avec des methodes first last length ?

    seka ? locé ? remy ?
    Je m'y connais pas plus que ça en JSON et encore moins en librairies mais à mon avis le mieux serait de rajouter l'attribut lastValue qui pointe vers la dernière valeur :foo.lastValue = foo["panier2"]["1"];.
    C'est pas super coûteux et si ça se justifie alors autant l'utiliser.

    Pour moi le fait d'avoir une notion premier/dernier dans un objet json n'a pas de sens, c'est un ensemble d'attribut, pas une liste.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/12/2014, 13h57
  2. Sélectionner le premier élément d'un objet JSON en JavaScript ?
    Par beninsky dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/10/2010, 04h16
  3. [AS2] Récupérer une valeur d'un objet lorqu'on clique dessus
    Par softyClochette dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 13/10/2005, 18h40
  4. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35
  5. [IB] [trigger+generator] récup dernière valeur générée ?
    Par fred64 dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/05/2004, 00h38

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