2011-07-28 21 views
12

Si tengo:cambio clave en la matriz asociativa js

var myArray = new Array(); 

myArray['hello'] = value; 

¿Cómo puedo cambiar la clave 'hola' a otra cosa?

Algo como esto funcionaría.

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

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

myArray[to] = value; 

¿Pero hay una función nativa o una mejor manera de hacerlo?

edición:

Debido a la falta de matrices asociativas en js, lo que quiero hacer modificar el nombre de la propiedad de un objeto tan eficientemente como sea posible.

+0

El El método "splice()" no funcionará para las propiedades con nombre. Es un método de matriz y, como tal, solo opera en las propiedades de índice entero del objeto. – Pointy

Respuesta

23

En JavaScript no existe una matriz asociativa. Los objetos se pueden utilizar en su lugar:

var myHash = new Object(); 

o

var myHash = {}; 

reemplazar se puede hacer así:

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

pero la mejor forma de escribirlo:

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

El problema con la eliminación es que realmente no se elimina, simplemente establece el valor en indefinido. –

+1

Eso no debería ser cierto según la documentación: http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

Lo sentimos, tienes razón. No sabía eso. –

2

No puede realmente "cambiar" el nombre de la propiedad, pero siempre puede asignar un valor de propiedad a un nuevo nombre, y luego eliminar el original.

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

Además, está trabajando con una instancia de Array pero usándola como un objeto simple; todo lo que está haciendo funcionaría igual de bien con:

var myArray = {}; 

El "empalme()" se está tratando en el código publicado no va a funcionar, porque es sólo para las propiedades reales de matriz indexada enteros, y no las propiedades nombradas.

Que "borrar" realmente no elimina una propiedad realmente no importa. El valor "indefinido" es lo que obtiene cuando marca un objeto para una propiedad y no hay tal propiedad.

Cuestiones relacionadas