2010-11-14 23 views
17

Obecnie wydarzenie jest ustawione na checkboxes, a event.target daje mi zaznaczone pole wyboru, które zostało kliknięte.Jak usunąć właściwość z obiektu?

jestem utrzymania obiektu, który utrzymuje ścieżkę na wszystkich wybranych wyboru

var selectedMap = {}; 

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

i chcę, aby usunąć element z mapy, która jest zaznaczona

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

gdy ten go daje mi błąd w Firebug: selectedMap.remove is not a function

Więc moje pytanie jest Jak c a mogę usunąć element, gdy pole wyboru jest odznaczone?

+0

możliwe duplikat [Jak usunąć obiekt z JavaScript Object] (http://stackoverflow.com/questions/208105/how- to-remove-a-property-from-a-javascript-object) – Thomas

Odpowiedz

32

Korzystanie delete:

delete selectedMap[event.target.id]; 

Ty ustawiając wartość nieprawidłowo, choć. Oto poprawny sposób:

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

W rzeczywistości, można:

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

Pierwsze rzeczy docelową wydarzenie z okazji, że łatwiej jest wyobrazić sobie to z prostych ciągów:

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 

Używając zwykłego obiektu takiego jak to, zawsze używam przedrostka na moich klawiszach, aby uniknąć problemów. (Na przykład, co by się stało, gdyby identyfikator elementu docelowego był "toString"? Obiekt ma już dziedziczoną właściwość o nazwie "toString", a rzeczy bardzo szybko stają się bardzo dziwne.)

Tak dla mnie, robię to:

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

... i oczywiście:

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

+1 - dobra rada –

+0

J.Crowder: Usuń działa dobrze teraz, dziękuję za twoje wejście. – Rachel

+0

http://stackoverflow.com/questions/6485127/how-to-delete-unset-the-properties-of-a-javascript-object właśnie incase chcesz drugiej myśli przy usuwaniu –

5

co masz jest przedmiotem, a nie tablicą (chociaż tablica jest obiektem). Deklarujesz obiekt dosłownie z {}, podczas gdy literał tablicy jest zadeklarowany przy [].

delete można używać do usuwania właściwości obiektu jak tak

delete selectedMap[event.target.id]; 
Powiązane problemy