2010-11-14 27 views
17

Actualmente un evento está configurado en checkboxes, y event.target me da el status (checked = true/false) de la casilla de verificación que se hace clic.¿Cómo eliminar una propiedad de un objeto?

estoy manteniendo un objeto que mantiene la pista en todas las casillas de verificación seleccionadas

var selectedMap = {}; 

if(event.target == true){ 
    var key = event.target.id; 
    var val = event.target.name; 
    selectedMap[key] = val; 
} 

y quiero borrar un elemento del mapa que no está seleccionada

else if(event.target == false){ 
    selectedMap.remove(event.target.id); 
} 

cuando corro esto me da error en Firebug: selectedMap.remove is not a function

Así que mi pregunta es Cómo c ¿elimino el elemento cuando la casilla no está seleccionada?

+0

posible duplicado de [Cómo eliminar una propiedad de un objeto Javascript] (http://stackoverflow.com/questions/208105/how- to-remove-a-property-from-a-javascript-object) – Thomas

Respuesta

32

Usando delete:

delete selectedMap[event.target.id]; 

está configurando el valor de forma incorrecta, sin embargo. Esta es la forma correcta:

if(event.target == true){ 
    var key = event.target.id; // <== No quotes 
    var val = event.target.name; // <== Here either 
    selectedMap[key] = val; 
} 

De hecho, usted podría:

if(event.target == true){ 
    selectedMap[event.target.id] = event.target.name; 
} 

conseguir las cosas destino del evento fuera del camino, es más fácil de imaginar esto con cuerdas simples:

var obj = {}; 
obj.foo = "value of foo"; 
alert(obj.foo); // alerts "value of foo" without the quotes 
alert(obj["foo"]); // ALSO alerts "value of foo" without the quotes, dotted notation with a literal and bracketed notation with a string are equivalent 
delete obj.foo; // Deletes the `foo` property from the object entirely 
delete obj["foo"]; // Also deletes the `foo` property from the object entirely 
var x = "foo"; 
delete obj[x];  // ALSO deeltes the `foo` property 

Cuando uso un objeto simple como este, siempre uso un prefijo en mis claves para evitar problemas. (Por ejemplo, ¿qué pasaría si el ID de su elemento objetivo fuera "toString"? El objeto ya tiene una propiedad [heredada] llamada "toString" y las cosas se volverían Muy Raras Muy Rápidamente)

Así que para mí, lo hago esto:

if(event.target == true){ 
    selectedMap["prefix" + event.target.id] = event.target.name; 
} 

... y por supuesto:

delete selectedMap["prefix" + event.target.id]; 
+1

+1 - buen consejo –

+0

J.Crowder: Eliminar funciona bien ahora, gracias por su contribución. – Rachel

+0

http://stackoverflow.com/questions/6485127/how-to-delete-unset-the-properties-of-a-javascript-object en caso de que quieras una segunda idea en eliminar –

5

Lo que tenemos es un objeto y no una matriz (aunque un array es un objeto). Usted declara un objeto literal con {} mientras que una matriz literal se declara con [].

Puede utilizar delete para eliminar una propiedad del objeto como tal

delete selectedMap[event.target.id]; 
Cuestiones relacionadas