2013-07-19 15 views
17

मैं पहले लिखी गई सभी चाबियाँ और संग्रहण दिखाना चाहता हूं। मेरा कोड नीचे है। मैंने एक फ़ंक्शन बनाया (ऑलस्टोरेज) लेकिन यह काम नहीं करता है। मैं यह कैसे कर सकता हूं?सभी स्थानीय स्टोरेज आइटम

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

'लंबाई' को आपके कोड में 'लंबाई' के रूप में लिखा गया है। 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 जावास्क्रिप्ट के लिए एक नया इसके अतिरिक्त है (ECMAScript 5 इस तरह)। यह किसी ऑब्जेक्ट पर अपनी सभी चाबियाँ सूचीबद्ध करता है जो फॉर-इन लूप का उपयोग करने से तेज़ है जो इसका विकल्प है।

हालांकि, यह कुंजी नहीं दिखाएगा। इसके लिए आपको एक सरणी के बजाय ऑब्जेक्ट वापस करने की आवश्यकता है (जो कि पॉइंट-कम आईएमओ है क्योंकि यह आपको एक अलग ऑब्जेक्ट के साथ स्थानीय स्टोरेज के साथ पहले ही लाएगा - लेकिन उदाहरण के लिए):

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

अच्छा, 'Object.keys', +1 के बारे में नहीं पता था – tymeJV

11

localStorage एक सरणी नहीं है, लेकिन एक वस्तु है, तो sth कोशिश करें।

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

वह फ़ंक्शंस भी सूचीबद्ध करेगा। – Nux

+0

@Nux यह मेरे लिए नहीं है – tborychowski

+0

अजीब ... केवल फ़ायरफ़ॉक्स में एक समस्या है। – 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)}}, {}); 
     } 
संबंधित मुद्दे