2010-07-20 6 views
1

J'utilise Javascript.Utilise la valeur d'une variable chaîne comme 'index' d'un objet existant en Javascript

J'ai

var myobj = { 
       "one": { 
         "name" : "paul", 
         "no" : "A123" 
       }, 
       "two": { 
         "name" : "mike", 
         "no" : "B456" 
       }, 
       "three": { 
         "name" : "andy", 
         "no" : "C789" 
       }, 
}; 

J'ai un autre objet newitem que je veux insérer

var newIndex = "four"; 
var newItem = { 
       "name" : "leo", 
       "no" : "D987" 
       }; 

Comment insérer newItem en utilisant myobjnewIndex comme 'index'?

Par ailleurs, newIndex n'est pas généré par moi, donc je ne peux pas dire que myobj.four = newItem;myobj.newIndex = newItem ne fonctionne pas car il utilise le mot « newIndex » comme l'indice au lieu de sa valeur.

Des idées?

Répondre

7

Utilisez le accesseur de propriété de notation de support:

myobj[newIndex] = newItem; 

Il est également utile lorsque vous souhaitez définir une propriété dont le nom est un identifiant valide, par exemple:

obj["1foo"] = "bar"; // `obj.1for` will cause a SyntaxError 
obj["a b"] = "bar"; // `obj.a b` will cause a SyntaxError 

Notez que vous pouvez même utiliser une expression avec cet accesseur de propriété, par exemple:

obj[someFunc()] = "foo"; 

Il évaluera e l'expression entre les crochets, et il convertira le résultat en chaîne, car JavaScript n'a pas true tables de hachage, les noms de propriété doivent être de type String.

Plus d'infos:

+0

Notez que dans la dernière édition de la norme sur laquelle JavaScript est basée, il n'est pas nécessaire d'utiliser la notation support en se référant aux propriétés nommées par mots-clés ou réservés mots: 'obj.for = 'moi' est autorisé par ECMAScript 5ème édition. (Quelques autres contextes, tels que les noms de propriété dans les littéraux d'objet, ont également été desserrés pour permettre des mots-clés.) Ce changement a été implémenté dans Firefox, depuis quelques années, si vous voulez jouer avec. –

+0

@Jeff, ouais, j'ai oublié de le mentionner, dans ES5 un 'IdentifierName' peut être utilisé avec l'accesseur de propriété' .'. Je vais faire un meilleur exemple ... – CMS

Questions connexes