2010-05-16 4 views
2

J'ai quelques tableaux js et je veux trouver les tableaux par leur nom. par exemple:Javascript: trouver le tableau par nom

arr1 = [1,2,3]; 
arr2 = [3,4,5]; 

Et les accès comme ceci:

var intNum = 2; 
var arrName = 'arr' + intNum; 

arrName[0]; // equals 3 

Est-ce possible?

Merci, Kevin

Répondre

3
window['arr'+intNum] 

si

arr1 = [1,2,3]; 
arr2 = [3,4,5]; 
intNum=2; 
alert(window['arr'+intNum][1]); //will alert 4 
+1

Il convient de noter que ce n'est pas un accès au tableau, c'est l'accès aux objets. Sans parler de cet exemple ne fonctionne que si les tableaux sont dans la portée globale. – Matt

+0

Je vais devoir donner cette réponse, car c'est la méthode que j'ai utilisée. Fondamentalement, j'avais des tableaux qui étaient générés dans le document, de sorte qu'ils avaient une portée mondiale. Je dois donner un clin d'œil à Sean Kinsey (et une discussion) pour une solution plus robuste, tout en m'aidant à comprendre ce que j'utilise. Merci a tous. –

5

Il est possible, mais je vous suggère de placer ces tableaux en tant que propriétés d'un objet, qui le rend beaucoup plus facile

var arrays { 
    arr1 : [1,2,3], 
    arr2 : [4,5,6] 
} 

var arrNum = 2; 
var arr = arrays["arr" + arrNum] // arrays.arr2 

Les propriétés des objets sont accessibles à la fois à l'aide du . opérateur et comme éléments nommés en utilisant la notation ["propname"].

L'utilisation de eval ou l'utilisation de l'astuce ci-dessus sur window est déconseillée. L'évaluation est normalement un signe de code mal construit, et l'utilisation de fenêtre dépend de la fenêtre étant l'objet variable de la portée globale - cela ne fait partie d'aucune spécification et ne fonctionnera pas nécessairement à travers les navigateurs.

+0

pourquoi la fenêtre "trick" n'est pas conseillée (je suis sûr que tous les principaux développeurs FW dans le monde js aimeraient le savoir) –

+0

Parce que vous comptez sur la fenêtre étant l'objet variable de la portée globale - cela ne fait partie d'aucune spec et ne fonctionnera pas nécessairement à travers les navigateurs. –

+0

Si vous craignez que 'window' ne soit pas l'objet global, vous pouvez appeler une fonction autonome qui retourne simplement' this'. Bien sûr, à ce stade, il vaudrait probablement mieux utiliser votre suggestion et les mettre dans un objet. –

Questions connexes