Jak mogę dynamicznie tworzyć klucze w tablicach asocjacyjnych javascript?
Cała dokumentacja, którą znalazłem do tej pory, to aktualizacja kluczy, które zostały już utworzone:
arr['key'] = val;
Mam taki ciąg " name = oscar "
I chcę skończyć z czymś takim:
{ name: 'whatever' }
To znaczy, dzielę ciąg i otrzymuję pierwszy element i chcę umieścić go w słowniku.
Kod
var text = ' name = oscar '
var dict = new Array();
var keyValuePair = text.split(' = ');
dict[ keyValuePair[0] ] = 'whatever';
alert( dict ); // prints nothing.
javascript
associative-array
OscarRyz
źródło
źródło
Odpowiedzi:
Skorzystaj z pierwszego przykładu. Jeśli klucz nie istnieje, zostanie dodany.
Wyskoczy okno komunikatu zawierające „oscar”.
Próbować:
źródło
Jakoś wszystkie przykłady, choć działają dobrze, są nadmiernie skomplikowane:
new Array()
, co jest przesadą (i narzutem) dla prostej tablicy asocjacyjnej (słownik AKA).new Object()
. Działa dobrze, ale dlaczego całe to dodatkowe pisanie?To pytanie jest oznaczone jako „początkujący”, więc uprośćmy to.
Prosty sposób na użycie słownika w JavaScript lub „Dlaczego JavaScript nie ma specjalnego obiektu słownika?”:
Teraz zmieńmy wartości:
Usuwanie wartości jest również łatwe:
źródło
JavaScript nie ma tablic asocjacyjnych , ma obiekty .
Wszystkie poniższe wiersze kodu robią dokładnie to samo - ustaw pole „name” na obiekcie na „orion”.
Wygląda na to, że masz tablicę asocjacyjną, ponieważ an
Array
jest takżeObject
- chociaż w rzeczywistości nie dodajesz żadnych elementów do tablicy, ustawiasz pola na obiekcie.Teraz, gdy to wyjaśniono, oto działające rozwiązanie twojego przykładu
źródło
W odpowiedzi na MK_Dev można iterować, ale nie po kolei. (Do tego oczywiście potrzebna jest tablica)
Szybkie wyszukiwanie w Google wyświetla tabele skrótów w javascript
Przykładowy kod do zapętlania wartości w haszu (z wyżej wspomnianego łącza):
źródło
Kod oryginalny (dodałem numery linii, aby móc się do nich odnosić):
Prawie na miejscu...
trim
na tekście, tak jestname = oscar
.trim
w linii 1, używać=
i przycinać każdą keyValuePairdodaj linię po 3 i przed 4:
wiersz 4: Teraz staje się:
wiersz 5: Zmień na:
Próbuję powiedzieć, że
dict[keyValuePair[0]]
to nie działa, musisz ustawić ciąg znakówkeyValuePair[0]
i użyć go jako klucza asocjacyjnego. To jedyny sposób, w jaki mam mój do pracy. Po skonfigurowaniu możesz odwołać się do niego za pomocą indeksu numerycznego lub wprowadzić cudzysłowy.Mam nadzieję, że to pomaga.
źródło
Wszystkie nowoczesne przeglądarki obsługują mapę , która jest ograniczeniem danych klucz / wartość. Istnieje kilka powodów, dla których korzystanie z mapy jest lepsze niż obiekt:
Przykład:
Jeśli chcesz, aby klucze, do których nie ma odniesienia w innych obiektach, były usuwane , należy rozważyć użycie WeakMap zamiast mapy.
źródło
Myślę, że lepiej, jeśli właśnie tak stworzyłeś
Aby uzyskać więcej informacji, spójrz na to
Struktury danych JavaScript - tablica asocjacyjna
źródło
jest to w porządku, ale iteruje każdą właściwość obiektu tablicy. jeśli chcesz iterować tylko przez właściwości myArray.one, myArray.two ... spróbuj tego
teraz możesz uzyskać dostęp zarówno przez myArray [„one”], jak i iterować tylko poprzez te właściwości.
źródło
Array
aObject
i działa tylko zObject
drzew! Cudowny wgląd! Jest to bardzo przydatne do zrobieniaObject.getOwnPropertyNames(obj/array)
!}
źródło