2011-07-28 5 views
12

Si j'ai:changement clé dans un tableau associatif js

var myArray = new Array(); 

myArray['hello'] = value; 

Comment puis-je changer la clé « bonjour » à autre chose?

Quelque chose comme ça fonctionnerait.

var from = 'hello', 
    to = 'world', 
    i, value = myArray[from]; 

for(i in myArray) 
    if(i == from) myArray.splice(i, 1); 

myArray[to] = value; 

Mais existe-t-il une fonction native ou une meilleure façon de le faire?

modifier:

En raison du manque de tableaux associatifs dans js, ce que je veux faire modifier le nom de la propriété d'un objet aussi efficacement que possible.

+0

Le La méthode "splice()" ne fonctionnera pas pour les propriétés nommées. C'est une méthode Array et en tant que telle, elle ne fonctionne que sur les propriétés indexées par des entiers de l'objet. – Pointy

Répondre

23

En JavaScript il n'y a pas une telle chose comme tableau associatif. Les objets peuvent être utilisés à la place:

var myHash = new Object(); 

ou

var myHash = {}; 

remplacer peut être fait comme ceci:

myHash["from"] = "value"; 
myHash["to"] = myHash["from"]; 
delete myHash["from"]; 

mais la meilleure façon de l'écrire:

myHash.from = "value"; 
myHash.to = myHash.from; 
delete myHash.from; 
+1

Le problème avec suppression est qu'il ne supprime pas vraiment, il définit simplement la valeur définie. –

+1

Cela ne devrait pas être vrai selon la documentation: http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

Désolé, vous avez raison. Je ne le savais pas. –

2

Vous ne pouvez pas vraiment « changement » le nom de la propriété, mais vous pouvez toujours attribuer une valeur de la propriété à un nouveau nom, puis supprimez l'original.

myArray['world'] = myArray.hello; 
delete myArray.hello; 

De plus, vous travaillez avec une instance de tableau mais en l'utilisant comme un simple objet; tout ce que vous faites cela fonctionnerait aussi bien avec:

var myArray = {}; 

Le « épissure() » vous essayez dans le code affiché ne fonctionnera pas, car il est seulement pour les propriétés de tableau indexé entiers réels, et pas les propriétés nommées.

que « supprimer » ne supprime pas vraiment une propriété n'a pas d'importance. La valeur « undefined » est ce que vous obtenez lorsque vous vérifiez un objet pour un bien et il n'y a pas de telle propriété.

Questions connexes