2013-07-19 3 views
17

以前に書き込まれたすべてのキーとストレージを表示したい。 私のコードは以下の通りです。私は関数(allStorage)を作成しましたが、機能しません。 どうすればいいですか?すべてのローカルストレージアイテム

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'はあなたのコードで' lenght'と綴られています。 FYI。 – tymeJV

答えて

27

あなたがこれにあなたの機能を変更する場合は、キーに基づいてすべての項目を一覧表示することができます(アイテムのみを一覧表示されます):

function allStorage() { 

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

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

    return values; 
} 

Object.keysはJavaScriptに新たに追加された(ECMAScriptの5本のように)。このオプションは、for-inループを使用するよりも速いオブジェクト上のすべてのキーをリストします。

ただし、これはキーを表示しません。そのためには、配列の代わりにオブジェクトを返す必要があります(これはpoint-less IMOです。以前と同じように、別のオブジェクトを使ってlocalStorageを使っていた限りです)。

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; 
} 
あなたがリストコンパクトな形式にしたい場合は

、代わりにこれを行う - ここでは、アレイ内の各項目は、あとでなどのペアに分割してできたkey=itemを持っています:

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、 'Object.keys'、+1について知りませんでした – tymeJV

11

localStorage配列が、オブジェクトではありませんので、STHを試してみてください。

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

これも関数をリストします。 – Nux

+0

@Nuxそれは私のためではありません – tborychowski

+0

奇妙な... Firefoxでのみ問題に見えます。 – 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

もう少し簡潔:

getAllLocalStorage() { 
    return Object.keys(localStorage) 
     .reduce((obj, k) => { 
      return { ...obj, [k]: localStorage.getItem(k)}}, {}); 
     } 
関連する問題