Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2011, 16h49   #1
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 89
Points : 25
Points : 25
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 :
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 !
beninsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 17h04   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 009
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 009
Points : 45 094
Points : 45 094
Code :
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
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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 17h09   #3
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 89
Points : 25
Points : 25
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
beninsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 17h25   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
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 :
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 19h25   #5
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 009
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 009
Points : 45 094
Points : 45 094
sinon il doit bien trainer une lib json qui traine avec des methodes first last length ?

seka ? locé ? remy ?
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 21h47   #6
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 89
Points : 25
Points : 25
Merci pour ta solution Bovino je vais essayer d'appliquer ca

@SpaceFrog je ne sais pas du tout
beninsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 22h15   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
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 :
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 22h21   #8
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 89
Points : 25
Points : 25
@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
beninsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 22h28   #9
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 89
Points : 25
Points : 25
Merci je mets le sujet résolu.
beninsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 09h38   #10
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
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.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h41.


 
 
 
 
Partenaires

Hébergement Web