2009-09-06 16 views
61

Dadacómo quitar valor clave + a partir de hash en javascript

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key2'] = { Name: 'Object 2' }; 
myHash['key3'] = { Name: 'Object 3' }; 

cómo puedo eliminar key2 y object 2 a partir del hash, que termina en un estado como si lo hice:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key3'] = { Name: 'Object 3' }; 

borrar no hace lo que quiero;

delete myHash['key2'] 

simplemente me da esto:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myhash['key2'] = null; 
myHash['key3'] = { Name: 'Object 3' }; 

los únicos documentos que puedo encontrar en splice y slice trato con los indexadores entero, que no tengo.

Editar: Yo también no sé que 'clave2' está necesariamente en la posición [1]

ACTUALIZACIÓN

OK ligera cortina de humo, borrar sí parece hacer lo que quiero en la superficie, Sin embargo, im usando json2.js a stringify mi objeto JSON para empujar de nuevo al servidor,

después de que he eliminado, myHash se serializado como:

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ] 

¿Es esto un error en json2.js? o es algo que estoy haciendo mal con eliminar?

Gracias

+3

Lo que está haciendo es agregar propiedades a un objeto, que es diferente a agregar elementos a una matriz/hash. Está buscando una manera de eliminar una propiedad, más o menos. Intente eliminar myHash.key1, como se menciona en otros comentarios. –

+2

Si es una tabla hash, debe usar 'var myHash = new Object()' en lugar de 'var myHash = new Array()'. – cprcrack

Respuesta

150

Usted está buscando delete:

delete myhash['key2'] 

Véase el Core Javascript Guide

+1

Pensé que esto era correcto, por eso lo intenté en primer lugar. Parece que funcione, mi problema está realmente en Json.stringify, actualizaré la pregunta –

+6

y usaré la función de empalme. Eliminar deja un agujero en la matriz. –

+0

Esto funciona para mí. ¡Gracias! –

1

Otra opción puede ser este John Resig remove method. puede adaptarse mejor a lo que necesita si conoce el índice en la matriz.

+2

bien no tener el índice es exactamente lo que dice la pregunta –

+0

Hola @AndrewBullock Tengo una consulta que obtengo matriz JSON Ej: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \ "}] pero quiero obtener como [{" DE ":" 3 "}] de esta manera, pero no obtengo esta salida. Por favor, ayúdenme –

11

¿Por qué usa new Array(); para hash? Necesitará usar new Object() en su lugar.

Y creo que obtendrás lo que quieres.

+4

No me gusta nada nuevo. Prefiero var myHash = []; – Nosredna

+10

O en este caso, myHash = {}; :-) – Nosredna

+0

@Nosredna totalmente de acuerdo :) –

6

Usted dice que no necesariamente sabe que 'key2' está en posición [1]. Bueno, no lo es. La posición 1 estaría ocupada por myHash [1].

Estás abusando de arreglos de JavaScript, que (al igual que las funciones) permiten valores hash de clave/valor. A pesar de que JavaScript lo permite, no le da facilidades para manejarlo, como lo haría un lenguaje diseñado para matrices asociativas. Los métodos de matriz de JavaScript funcionan solo con las propiedades numeradas.

Lo primero que debe hacer es cambiar a objetos en lugar de matrices. No tiene una buena razón para usar una matriz aquí en lugar de un objeto, así que no lo haga. Si desea utilizar una matriz, simplemente numere los elementos y abandone la idea de hash. La intención de una matriz es contener información que puede indexarse ​​en forma numérica.

Puede, por supuesto, poner un hash (objeto) en una matriz si lo desea.

myhash[1]={"key1","brightOrangeMonkey"}; 
+0

tienes razón, gracias :) mira mi respuesta –

Cuestiones relacionadas