2013-07-19 11 views
17

Chcę wyświetlić wszystkie zapisane wcześniej klucze i pamięć. Mój kod jest poniżej. Stworzyłem funkcję (allStorage), ale to nie działa. Jak mogę to zrobić?Wszystkie lokalne elementy pamięci masowej

function storeUserScribble(id) { 
     var scribble = document.getElementById('scribble').innerHTML; 
     localStorage.setItem('userScribble',scribble); 
    } 

    function getUserScribble() { 
     if (localStorage.getItem('userScribble')) { 
      var scribble = localStorage.getItem('userScribble'); 
     } 
     else { 
      var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!'; 
     } 
     document.getElementById('scribble').innerHTML = scribble; 
    } 

    function clearLocal() { 
     localStorage.clear(); 
     return false; 
    } 

    function allStorage() { 
     var archive = []; 
     for (var i = 0; i<localStorage.length; i++) { 
      archive[i] = localStorage.getItem(localStorage.key(i)); 
     } 
    } 
+3

'length' jest napisane jako' długość 'w kodzie. FYI. – tymeJV

Odpowiedz

27

Jeśli zmodyfikować funkcję tę można wymienić wszystkie elementy oparte na kluczu (pokaże tylko te elementy):

function allStorage() { 

    var values = [], 
     keys = Object.keys(localStorage), 
     i = keys.length; 

    while (i--) { 
     values.push(localStorage.getItem(keys[i])); 
    } 

    return values; 
} 

Object.keys to nowy dodatek do JavaScript (ECMAScript 5). Zawiera listę wszystkich własnych kluczy na obiekcie, który jest szybszy niż użycie pętli for-in, która jest opcją do tego.

Jednak to nie pokazuje klawiszy. W tym celu musisz zwrócić obiekt zamiast tablicy (co jest bezcelowym IMO, ponieważ przyniesie Ci to tak daleko jak wcześniej z localStorage tylko z innym obiektem - ale na przykład sake):

function allStorage() { 

    var archive = {}, // Notice change here 
     keys = Object.keys(localStorage), 
     i = keys.length; 

    while (i--) { 
     archive[ keys[i] ] = localStorage.getItem(keys[i]); 
    } 

    return archive; 
} 

Jeśli chcesz wymieniając kompaktowy format, następnie to zrobić, a nie - tutaj każdy element w tablicy będzie miał key=item którą później można podzielić na pary i tak dalej:

function allStorage() { 

    var archive = [], 
     keys = Object.keys(localStorage), 
     i = 0, key; 

    for (; key = keys[i]; i++) { 
     archive.push(key + '=' + localStorage.getItem(key)); 
    } 

    return archive; 
} 
+1

Nice, nie wiedziałeś o 'Object.keys', +1 – tymeJV

11

localStorage nie jest tablicą, ale obiekt, więc spróbować czegoś. tak:

for (var a in localStorage) { 
    console.log(a, ' = ', localStorage[a]); 
} 
+0

To również wyświetli listę funkcji. – Nux

+0

@Nux to nie dla mnie – tborychowski

+0

Dziwne ... Wydaje się być problemem tylko w Firefoksie. – Nux

0
// iterate localStorage 
for (var i = 0; i < localStorage.length; i++) { 

    // set iteration key name 
    var key = localStorage.key(i); 

    // use key name to retrieve the corresponding value 
    var value = localStorage.getItem(key); 

    // console.log the iteration key and value 
    console.log('Key: ' + key + ', Value: ' + value); 

} 
0

nieco bardziej zwięzły:

getAllLocalStorage() { 
    return Object.keys(localStorage) 
     .reduce((obj, k) => { 
      return { ...obj, [k]: localStorage.getItem(k)}}, {}); 
     } 
Powiązane problemy