2009-09-06 21 views
61

Givenjak usunąć kluczową wartość + z hash javascript

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

jak mogę usunąć key2 i object 2 z hash, który kończy się w stanie jakby zrobiłem:

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

delete nie robi, co chcę;

delete myHash['key2'] 

po prostu daje mi to:

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

jedynymi docs mogę znaleźć na splice i slice czynienia z indeksujących całkowitą, której nie mam.

Edit: Ja też nie wiem, że „klucz2” jest koniecznie w pozycji [1]

UPDATE

OK niewielki czerwony śledź, usuwanie wydaje się robić to, co chcę na powierzchni, jednak im przy json2.js do stringify mojego obiektu JSON do pchania z powrotem do serwera,

ive po usunięciu myHash dostaje odcinkach jak:

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

Czy to jest błąd w json2.js? czy jest to coś, co robię źle przy usuwaniu?

Dzięki

+3

To, co robisz, to dodawanie właściwości do obiektu, który różni się od dodawania elementów do tablicy/hasza. Szukasz sposobu na usunięcie nieruchomości, mniej więcej. Spróbuj usunąć myHash.key1, jak wspomniano w innych komentarzach. –

+2

Jeśli to hashtable, powinieneś użyć 'var myHash = new Object()' zamiast 'var myHash = new Array()'. – cprcrack

Odpowiedz

150

Szukacie delete:

delete myhash['key2'] 

Zobacz Inną opcją Core Javascript Guide

+1

Pomyślałem, że to było poprawne, dlatego wypróbowałem to w pierwszej kolejności. To sprawia, że ​​do pracy, mój problem polega na Json.stringify, źle zaktualizować pytanie –

+6

użyć funkcji splicingu zamiast. Delete pozostawia dziurę w tablicy. –

+0

Ta praca dla mnie. Dzięki! –

1

może być to John Resig remove method. może lepiej dopasować to, czego potrzebujesz. jeśli znasz indeks w tablicy.

+2

cóż, brak indeksu jest dokładnie tym, o czym mówi pytanie: –

+0

Hej @AndrewBullock Mam jedno zapytanie Otrzymuję tablicę JSON Ex: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \ "}] ale chcę dostać się jak [{" "DE": "3"}] w ten sposób, ale nie otrzymuję tego wyjścia Proszę pomóż mi –

11

Dlaczego używasz new Array(); do mieszania? Zamiast tego należy użyć new Object().

Myślę, że dostaniesz to, co chcesz.

+4

Nie lubię nowych. Wolę var myHash = []; – Nosredna

+10

Lub w tym przypadku myHash = {}; :-) – Nosredna

+0

@Nosredna całkowicie zgadzam :) –

6

Mówisz, że niekoniecznie wiesz, że "key2" jest na pozycji [1]. Cóż, nie jest. Pozycja 1 byłaby zajęta przez myHash [1].

Niszczysz tablice JavaScript, które (podobnie jak funkcje) pozwalają na hasze klucza/wartości. Mimo że JavaScript pozwala na to, to nie daje możliwości radzenia sobie z nim, ponieważ język zaprojektowany dla tablic asocjacyjnych. Metody tablic JavaScript działają tylko z numerowanymi właściwościami.

Najpierw należy przełączyć się na obiekty, a nie tablice. Nie masz dobrego powodu, aby używać tablicy zamiast obiektu, więc nie rób tego. Jeśli chcesz użyć tablicy, po prostu policz elementy i zrezygnuj z pomysłów na hasze. Celem tablicy jest przechowywanie informacji, które można indeksować liczbowo.

Możesz, oczywiście, umieścić hash (obiekt) w tablicy, jeśli chcesz.

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

masz rację, dziękuję :) zobacz moją odpowiedź –

Powiązane problemy