Zastanawiam się tylko, jak uzyskać wszystkie kluczowe wartości localStorage
.
Próbowałem pobrać wartości za pomocą prostej pętli JavaScript
for (var i=1; i <= localStorage.length; i++) {
alert(localStorage.getItem(i))
}
Ale działa tylko wtedy, gdy klawisze są numerami progresywnymi, zaczynając od 1.
Jak zdobyć wszystkie klucze, aby wyświetlić wszystkie dostępne dane?
javascript
html
key
local-storage
Simone
źródło
źródło
Odpowiedzi:
w ES2017 możesz użyć:
źródło
Object.keys()
działa zgodnie z oczekiwaniami?EDYCJA: ta odpowiedź jest bardzo pozytywna, więc myślę, że jest to częste pytanie. Czuję, że jestem to winny każdemu, kto mógłby natknąć się na moją odpowiedź i pomyśleć, że jest to „właściwe” tylko dlatego, że zaakceptowano dokonanie aktualizacji. Prawda jest taka, że powyższy przykład nie jest właściwym sposobem, aby to zrobić. Najlepszym i najbezpieczniejszym sposobem jest zrobienie tego w następujący sposób:
źródło
localStorage.length
i nie używać go bezpośrednio? 2) Po co deklarować to w pętli for? 3) Dlaczego++i
jest bardziej preferowanyi++
?++i
zdecydowanie nie sprawia, że pętla zaczyna się odi = 1
. Trzecie wyrażenie w nawiasach jest oceniane po każdej iteracji.i++
i++i
oba mają dokładnie ten sam efekti
. Różnica polega na tym, że++i
szacuje się do nowej wartościi
po zwiększeniu, podczas gdyi++
szacuje się do wartościi
przed zwiększeniem. Nie ma tu absolutnie żadnej różnicy, ponieważ wszystko, na czym nam zależy, to efekt uboczny inkrementacjii
, a nie wartość wyrażenia.Object.keys(localStorage)
doskonale sprawdza się w tym scenariuszu, o ile nie musisz wspierać IE <9.localStorage.key( i )
częścią.Lubię w ten sposób tworzyć z tego dobrze widoczny obiekt.
Podobnie robię z ciasteczkami.
źródło
źródło
Możesz użyć tej
localStorage.key(index)
funkcji, aby zwrócić reprezentację ciągu, gdzieindex
jest n-ty obiekt, który chcesz pobrać.źródło
Jeśli przeglądarka obsługuje HTML5 LocalStorage, powinna również zaimplementować Array.prototype.map, umożliwiając to:
źródło
new Array(this.localStorage.length).fill(0)
co wydaje się nieco mniej hakerskie niż użycie Apply imo.Ponieważ pytanie dotyczyło znalezienia kluczy, pomyślałem, że wspomnę, że aby pokazać każdą parę kluczy i wartości, możesz to zrobić w następujący sposób (na podstawie odpowiedzi Kevina):
Spowoduje to zarejestrowanie danych w formacie „klucz: wartość”
(Kevin: jeśli chcesz, możesz po prostu wziąć te informacje do swojej odpowiedzi!)
źródło
Spowoduje to wydrukowanie wszystkich kluczy i wartości w localStorage:
ES6:
źródło
Możesz uzyskać klucze i wartości w ten sposób:
źródło
Zgadzam się z Kevinem, że ma najlepszą odpowiedź, ale czasami, gdy masz różne klucze w lokalnej pamięci o tych samych wartościach, na przykład chcesz, aby użytkownicy publiczni widzieli, ile razy dodali swoje przedmioty do swoich koszyków, musisz im pokazać ile razy możesz użyć tego:
źródło
Dla tych, którzy wspominają o używaniu
Object.keys(localStorage)
... nie, ponieważ nie będzie działać w Firefoksie (jak na ironię, ponieważ Firefox jest wierny specyfikacji). Rozważ to:Ponieważ key, getItem i setItem to metody prototypowe,
Object.keys(localStorage)
zwrócą tylko wartość["key2"]
.Najlepiej zrobić coś takiego:
źródło
object.keys()
... Zaktualizuję moją odpowiedź, aby to odzwierciedlić.[Exposed=Window]
. Powoduje to zachowanie, które opisuję. Gdyby został określony za pomocą[Exposed=Window,OverrideBuiltins]
, dałoby zachowanie, którego oczekujemy, ale specyfikacja nie określaOverrideBuiltins
. Możesz zobaczyć dyskusję na ten temat w whatwg / html tutaj: github.com/whatwg/html/issues/183Możemy też czytać po imieniu.
Powiedzmy, że zapisaliśmy wartość pod nazwą „użytkownik” w ten sposób
Następnie możemy go przeczytać za pomocą
Użyłem go i działa płynnie, nie ma potrzeby wykonywania pętli for
źródło