2010-08-03 7 views
3

Actuellement, je crée un tableau 3d en js en utilisant ce qui suit:Tableaux associatifs en Javascript?

var arr = [["name1", "place1", "data1"], 
      ["name2", "place2", "data2"], 
      ["name3", "place3", "data3"]]; 

I peut accéder à chaque élément à l'aide arr [0] ou arr [1]. Mais y at-il de toute façon je peux y accéder en utilisant une clé comme celle-ci: arr ["name1"] devrait me donner le premier. Aucune suggestion? Je pense que je suis à la recherche d'une fonctionnalité similaire à Hashmap.

Répondre

3

La seule façon de le faire est de l'encapsuler dans un objet.

var arr = { 
    name1 : ["name1", "place1", "data1"], 
    name2 : ["name2", "place2", "data2"], 
    name3 : ["name3", "place3", "data3"] 
}; 
+0

Impressionnant ... Fonctionne comme un charme. Merci beaucoup! – Legend

+0

@Legend - Ne pas oublier d'accepter une réponse. Il s'assurera que vous continuerez à obtenir des réponses de qualité à l'avenir. * Plus ça me fait bien paraître. :) * – ChaosPandion

+0

Bien sûr ... Il ya un délai de 15 minutes pour accepter les réponses :) – Legend

1

Javascript est un langage dynamique basé sur un prototype. Vous pouvez créer des objets et modifier leur structure quand vous le souhaitez.

var o = {name1: {place1: data1}, name2: {place2: data2}}; 

et l'accès avec:

o.name1 

La consultation mise en œuvre varie bien et quand vous avez beaucoup de propriétés qui change souvent cela peut être assez lent (sauf dans Chrome qui utilise un spécial schéma pour accéder aux propriétés de l'objet, c'est-à-dire les classes embarquées, la répartition a-la-dynamique de smalltalk). Certaines bibliothèques (par exemple MooTools) fournissent des structures liées à la carte de hachage,

+0

+1 pour les pointeurs. :) – Legend

+0

Donc, dans cet exemple, pour accéder à place1, le référenceriez-vous avec 'o.name1.place1'? et qu'est-ce que cela vous donnerait? La valeur 'place1' ou la valeur' data1'? – someone2088

0

La situation a changé au cours des six années depuis que cette question a été posée.

En raison de typage faible tableaux associatifs peuvent être truquées en JavaScript:

>> var names = new Array(); 
undefined 

>> names["first"] = "Dotan"; 
"Dotan" 

>> names["last"] = "Cohen"; 
"Cohen" 

>> for (key in names) { console.log(key+" "+names[key]) } 
undefined 
first Dotan 
last Cohen 

C'est parfois utile, et tous les navigateurs libérés depuis 2012 le soutien, mais il y a des mises en garde ! Le tableau ne peut pas être simplement relue:

>> names 
Array [ ] 

Plus important encore, la longueur du tableau ne peut pas récupérer facilement:

>> names.length 
0 

Par conséquent, ce n'est pas un tableau associatif dans le sens que JavaScript serait l'ont supporté si cela avait été prévu, mais plutôt une solution de contournement qui est souvent utile si, pour une raison quelconque, un vrai objet JS ne supporte pas ce dont vous avez besoin:

>> var names = {}; 
undefined 

>> names.first = "Dotan"; 
"Dotan" 

>> names.last = "Cohen"; 
"Cohen" 

>> for (key in names) { console.log(key+" "+names[key]) } 
undefined 
first Dotan 
last Cohen 

>> names 
Object { first: "Dotan", last: "Cohen" } 

>> Object.keys(names).length 
2 
Questions connexes