11548 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Hello tlm,

Je cherche à faire un objet JSON à partir de 2 tableaux.

var listeCouleurs = ['vert','rouge'];
var listeFruits = ['pomme','cerise'];

je voudrais obtenir ceci :

var fruits = {
'vert' : 'pomme',
'rouge' : 'cerise'
};

si vous avez une piste je suis preneur. Par avance merci
Modifié par niuxe (13 May 2012 - 14:13)
Salut,
En générant une chaîne de caractères ?
var listeCouleurs = ['vert','rouge'];
var listeFruits = ['pomme','cerise'];

var stringObject = '{';

for (var j = 0; j < listeFruits.length; i++) {
    stringObject += '"' + listeCouleurs[j] + '":"' + listeFruits[j] + '"';
    if (j < listeFruits.length - 1)
        stringObject += ',';
}

stringObject += '}';

var fruits = eval('(' + stringObject + ')');


Edit : Pour le pourquoi il faut mettre les parenthèses dans le eval :
http://www.json.org/js.html a écrit :
The text must be wrapped in parens to avoid tripping on an ambiguity in JavaScript's syntax.

Modifié par Gothor (11 May 2012 - 09:02)
Bonjour,

"eval" est l'une des fonctionnalités les plus dangereuses et les moins performantes de JavaScript. Merci de ne pas l'utiliser à tort et à travers ! Comme dirait Douglas Crockford, "eval is evil". En l'occurrence Gothor, je te laisse imaginer ce qui se passe si l'une des valeurs contient des caractères rigolos tels que ", ou \.

Qu'entends-tu par "objet JSON", niuxe ? Cela n'est pas très clair. JSON est un format de données dont la syntaxe se trouve être un sous-ensemble de la syntaxe JavaScript. Si ta question porte sur du code JavaScript, parler de JSON complique inutilement les choses, d'autant plus que le code que tu donnes en exemple ne respecte pas la syntaxe JSON.

Il y a une solution simple, mais est-ce vraiment cela que tu veux ?
var fruits = {};
for (var j = 0; j < listeCouleurs.length; ++j)
  fruits[listeCouleurs[j]] = listeFruits[j];

Modifié par Julien Royer (11 May 2012 - 09:32)
Modérateur
Julien Royer a écrit :

&quot;eval&quot; est l'une des fonctionnalités les plus dangereuses et les moins performantes de JavaScript. Merci de ne pas l'utiliser à tort et à travers ! Comme dirait Douglas Crockford, &quot;eval is evil&quot;. En l'occurrence Gothor, je te laisse imaginer ce qui se passe si l'une des valeurs contient des caractères rigolos tels que &quot;, ou \.

Qu'entends-tu par &quot;objet JSON&quot;, niuxe ? Cela n'est pas très clair. JSON est un format de données dont la syntaxe se trouve être un sous-ensemble de la syntaxe JavaScript. Si ta question porte sur du code JavaScript, parler de JSON complique inutilement les choses, d'autant plus que le code que tu donnes en exemple ne respecte pas la syntaxe JSON.


C'est bien ce qu'il me semblait à propos du eval(). Ces jours ci, j'ai vu le petit script avec le eval et il me semblait bien avoir lu ce que évoque Julien. Perso, j'utilise rarement ou voir jamais eval() (En php, c'est sale et aussi en JS).

J'ai fait un petit script similaire au tiens Julien :

var fruits = {};

for (var j = 0; j < listeCouleurs.length; ++j)

  fruits.listeCouleurs[j] = listeFruits[j];


Avant de rafraichir la page, je me suis douté que c'était erreur de syntaxe assurée (objet.string = string ....)

Ce que je cherche à faire, c'est de faire un obj où je récupère toutes les propriétés d'un élément et que je puisse consulter ces dernières sans me balader dans le DOM pour avoir telle ou telle valeur sur l'élément. Il est évident que je ne veux pas récupérer en un seul obj toutes les propriétés de tous les éléments.

Merci à tous les deux pour votre intervention Smiley smile

Ce soir je suis trop claqué pour tester, mais je vous tiens au courant. Smiley smile
Modifié par niuxe (11 May 2012 - 20:21)