initialisation d'un tableau ou une table de collection

Le
Etienne SOBOLE
salut
pour initialiser un tableau je fais souvent

var tArray = [2,6,8];

mais comment je peux initialiser une collection.
genre ecrire en une seule ligne

var tCollect = [];
tCollect['a'] = 9;
tCollect['b'] = 1;
tCollect['c'] = 5;

Est ce que c'est possible ???

merci
Etienne
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent vilday
Le #730316
mais comment je peux initialiser une collection.
genre ecrire en une seule ligne

var tCollect = [];
tCollect['a'] = 9;
tCollect['b'] = 1;
tCollect['c'] = 5;


var tCollect = {"a":9, "b":1, "c":5};

Mais attention à prendre garde de ne pas avoir modifié Object.prototype,
sinon on se retrouve avec des "collections" (hash) toutes cassées.

* démonstration sommaire *

Object.prototype.fclj = function() { alert('KC'); };
var tCollect = {"a":9, "b":1, "c":5};
for ( var k in tCollect )
{
// doc.write c'est pas top, juste utilisé ici pour la démo
document.write(k + ' = ' + tCollect[k] + '<br>');
}

* résultat "affiché" *

a = 9
b = 1
c = 5
fclj = function () { alert("KC"); }

Comme attendu, le hash contient 4 éléments au lieu des 3 définis. Tout
ça à cause de la manipulation de Object.prototype. Donc conclusion, ne
toucher saus aucun prétexte à Object.prototype :)

On peut passer outre et retomber sur ces pieds avec un hash correct en
modifiant un peut la boucle d'énumération, mais c'est pas terrible
d'aller modifier toutes ces boucles de partout.

Object.prototype.fclj = function() { alert('KC'); };
var tCollect = {"a":9, "b":1, "c":5};
for ( var k in tCollect )
{
if ( tCollect.hasOwnProperty(k) )
{
document.write(k + ' = ' + tCollect[k] + '<br>');
}
}

* résultat :
a = 9
b = 1
c = 5

Mais il n'empêche que les règles à suivre sont

1) Ne jamais, sous *aucun* prétexte, modifier Object.prototype

2) Ne pas utiliser autre chose que le "type" Object pour créer le hash.
Quoiqu'on puisse en dire Array n'est *pas* le type valide utilisable
pour créer des hash. C'est Object et personne d'autre.

http://javascript.crockford.com/survey.html
http://www.quirksmode.org/js/associative.html
http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/

--
laurent

Etienne SOBOLE
Le #730059
var tCollect = {"a":9, "b":1, "c":5};


super merci !

Mais attention à prendre garde de ne pas avoir modifié Object.prototype,
sinon on se retrouve avec des "collections" (hash) toutes cassées.


je sais meme pas a quoi ca sert donc effectivement y a peu de chance que j'y
touche :)


* démonstration sommaire *

Object.prototype.fclj = function() { alert('KC'); };
var tCollect = {"a":9, "b":1, "c":5};
for ( var k in tCollect )
{
// doc.write c'est pas top, juste utilisé ici pour la démo
document.write(k + ' = ' + tCollect[k] + '<br>');
}

* résultat "affiché" *

a = 9
b = 1
c = 5
fclj = function () { alert("KC"); }

Comme attendu, le hash contient 4 éléments au lieu des 3 définis. Tout ça
à cause de la manipulation de Object.prototype. Donc conclusion, ne
toucher saus aucun prétexte à Object.prototype :)

On peut passer outre et retomber sur ces pieds avec un hash correct en
modifiant un peut la boucle d'énumération, mais c'est pas terrible d'aller
modifier toutes ces boucles de partout.

Object.prototype.fclj = function() { alert('KC'); };
var tCollect = {"a":9, "b":1, "c":5};
for ( var k in tCollect )
{
if ( tCollect.hasOwnProperty(k) )
{
document.write(k + ' = ' + tCollect[k] + '<br>');
}
}

* résultat :
a = 9
b = 1
c = 5

Mais il n'empêche que les règles à suivre sont

1) Ne jamais, sous *aucun* prétexte, modifier Object.prototype

2) Ne pas utiliser autre chose que le "type" Object pour créer le hash.
Quoiqu'on puisse en dire Array n'est *pas* le type valide utilisable pour
créer des hash. C'est Object et personne d'autre.

http://javascript.crockford.com/survey.html
http://www.quirksmode.org/js/associative.html
http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/

--
laurent


encore merci

Publicité
Poster une réponse
Anonyme