HTML5 और जावास्क्रिप्ट में लोकलस्टोरीज के माध्यम से लूपिंग


92

इसलिए, मैं सोच रहा था कि मैं एक सामान्य वस्तु की तरह लोकलस्टोरीज के माध्यम से लूप कर सकता हूं क्योंकि इसकी लंबाई है। मैं इसके माध्यम से कैसे लूप कर सकता हूं?

localStorage.setItem(1,'Lorem');
localStorage.setItem(2,'Ipsum');
localStorage.setItem(3,'Dolor');

अगर मैं localStorage.lengthइसे लौटाता हूं 3जो सही है। तो मुझे लगता है कि एक for...inलूप काम करेगा।

मैं कुछ सोच रहा था:

for (x in localStorage){
    console.log(localStorage[x]);
}

लेकिन कोई फायदा नहीं हुआ। कोई विचार?

दूसरा विचार मेरे पास कुछ ऐसा था

localStorage.setItem(1,'Lorem|Ipsum|Dolor')
var split_list = localStorage.getItem(1).split('|');

जिसमें for...inकाम करता है।


इसे भी देखें : HTML5
लोकलस्टोरेज

जवाबों:


143

आप keyविधि का उपयोग कर सकते हैं । वें कुंजी localStorage.key(index)लौटाता है index(जब तक आप कुंजियों को जोड़ते या हटाते हैं, तब तक क्रम कार्यान्वयन-परिभाषित होता है लेकिन स्थिर रहता है)।

for (var i = 0; i < localStorage.length; i++){
    $('body').append(localStorage.getItem(localStorage.key(i)));
}

यदि आदेश मायने रखता है, तो आप JSON-serialized सरणी स्टोर कर सकते हैं:

localStorage.setItem("words", JSON.stringify(["Lorem", "Ipsum", "Dolor"]));

मसौदा कल्पना का दावा है कि संरचित क्लोन का समर्थन करने वाली कोई भी वस्तु एक मूल्य हो सकती है। लेकिन यह अभी तक समर्थित नहीं है।

संपादित करें: सरणी लोड करने के लिए, इसे जोड़ें, फिर स्टोर करें:

var words = JSON.parse(localStorage.getItem("words"));
words.push("hello");
localStorage.setItem("words", JSON.stringify(words));

आपका बहुत बहुत धन्यवाद! यह ठीक वही है जिसकी तलाश मुझे थी। Im आपके द्वारा भेजे गए JSON चीज़ को देखने जा रहा है। Thatd एकदम सही हो। यह एक बेबी नेम ऑफलाइन HTML5 iOS ऐप के लिए है।
ऑस्कर गोडसन

त्वरित प्रश्न, मैं उस JSON से कैसे जुड़ूंगा? जैसे, "डोलर" के बाद मैं "हैलो" कैसे जोड़ूंगा?
ऑस्कर गोडसन

1
आप रॉक, बस देख रहे हैं, यह काम करना चाहिए। क्या कोई कारण है जो मुझे पार्स का उपयोग करना चाहिए और न कि eval का उपयोग करना चाहिए? मैं इसे स्ट्रिंग से प्राप्त करने के लिए अब eval का उपयोग कर रहा हूं, लेकिन पार्स बेहतर / तेज है?
ऑस्कर गोडसन

1
@ ऑस्कर, parseअधिक सुरक्षित है क्योंकि यह आपको कोड निष्पादन से बचाता है। और अक्सर, यह बहुत तेज है। ब्लॉग
मैथ्यू

1
@Bagi, यह जो भी इनपुट है, डिकोड किया गया है। JSON टेक्स्ट का शीर्ष स्तर ऑब्जेक्ट या एरे हो सकता है। कोशिश करेंJSON.parse('["Lorem", "Ipsum", "Dolor"]').length
मैथ्यू फ्लैशेन


24

अन्य सभी उत्तरों के अलावा, आप jQuery लाइब्रेरी से $ .each फ़ंक्शन का उपयोग कर सकते हैं :

$.each(localStorage, function(key, value){

  // key magic
  // value magic

});

आखिरकार, वस्तु प्राप्त करें:

JSON .parse (localStorage.getItem (localStorage.key (कुंजी)));


2
यह केवल तभी काम करता है जब आप jQuery का उपयोग कर रहे हों। $अन्य पुस्तकालयों के लिए प्रयोग किया जाता है और अक्सर इसके लिए एक उपनाम के रूप में भी उपयोग किया जाता है document.querySelectorAll। प्रश्न को [jquery] प्रश्न के रूप में भी टैग नहीं किया गया है।
अन्नपूर्णे

9

यह मेरे लिए Chrome में काम करता है:

for(var key in localStorage) {
  $('body').append(localStorage.getItem(key));
}

1
वास्तव में कौन सा हिस्सा? यह स्निपेट मूल प्रश्न के अनुसार jQuery का उपयोग करता है। आप क्रोम जेएस कंसोल में यह कोशिश कर सकते हैं? for(var key in localStorage) { console.log(localStorage.getItem(key)); }
jtblin

@jtblin मैंने अभी इसकी कोशिश की, यह वापस आ गया TypeError: Cannot call method 'toString' of null, इसलिए मुझे लगता है कि 'कुंजी' वापस लौट रही है
जुआन कार्लोस अल्पीज़र चिनचिला

1
यह क्रोम, सफारी और फ़ायरफ़ॉक्स के हाल के संस्करणों में काम करता है
13 मार्च को

1
@JuanCarlosAlpizarChinchilla कोड में कोई 'toString' नहीं है इसलिए ツ_ (¯) _ / los। जैसा कि ऊपर टिप्पणी में बताया गया है, हाल के सभी ब्राउज़रों में ठीक काम करता है।
1

@jtblin मेरी टिप्पणी दो साल पुरानी है, इसलिए ツ_ (_) _ / Alp सिर के लिए धन्यवाद हालांकि
जुआन कार्लोस अल्पीज़र चिनचिला

1

पिछले उत्तर पर निर्माण एक ऐसा कार्य है जो प्रमुख मूल्यों को जाने बिना कुंजी द्वारा स्थानीय भंडारण के माध्यम से लूप करेगा।

function showItemsByKey() {
   var typeofKey = null;
   for (var key in localStorage) {
       typeofKey = (typeof localStorage[key]);
       console.log(key, typeofKey);
   }
}

यदि आप कंसोल आउटपुट की जांच करते हैं, तो आप देखेंगे कि आपके कोड द्वारा जोड़े गए आइटम में सभी टाइपो स्ट्रिंग है। जबकि अंतर्निहित आइटम या तो फ़ंक्शन {[मूल कोड]} या लंबाई संपत्ति के मामले में एक नंबर हैं। आप टाइप करने के लिए typeofKey वैरिएबल का उपयोग स्ट्रिंग्स पर कर सकते हैं ताकि केवल आपके आइटम प्रदर्शित हों।

ध्यान दें कि यह तब भी काम करता है जब आप एक संख्या या बूलियन को मान के रूप में संग्रहीत करते हैं क्योंकि वे दोनों तार के रूप में संग्रहीत होते हैं।


1

ये सभी उत्तर ब्राउज़र के पार स्थानीयस्टोरेज के कार्यान्वयन के बीच के अंतरों को नजरअंदाज करते हैं। इस डोमेन में योगदानकर्ताओं को उनके द्वारा वर्णित प्लेटफार्मों के साथ अपनी प्रतिक्रियाओं को भारी रूप से योग्य बनाना चाहिए। एक ब्राउज़र-वाइड कार्यान्वयन को https://developer.mozilla.org/en/docs/Web/API/Window/localStorage पर प्रलेखित किया गया है और बहुत शक्तिशाली होते हुए भी केवल कुछ मुख्य विधियाँ शामिल हैं। सामग्री के माध्यम से लूपिंग को व्यक्तिगत ब्राउज़रों के लिए लागू कार्यान्वयन की समझ की आवश्यकता होती है।


क्या आप इस बात का उदाहरण दे सकते हैं कि इन उत्तरों में से एक ब्राउज़र पर कैसे काम नहीं करेगा? यह एक लंबे समय से पहले था, लेकिन मैं इन उत्तरों के साथ पाशन के साथ किसी भी मुद्दे में भागना याद नहीं करता
ऑस्कर गोडसन

मैंने अपनी टिप्पणी को समग्र स्ट्रीम में जोड़ने का इरादा किया था, न कि इस विशेष पोस्ट में और थोड़ा कठोर हो सकता है। मैं उस समय निराश था जब एक क्रॉस-ब्राउज़र समाधान खोजने की कोशिश कर रहा था। स्टीव इसेनबर्ग द्वारा उदाहरण (नीचे) जिसमें (स्थानीय कुंजी में var कुंजी) {typeofKey = (टाइपो लोकलस्टोरेज [कुंजी]); कंसोल.लॉग (कुंजी, टाइपोफेकी); } वेबिट कार्यान्वयन पर काम नहीं करता है (इसे आजमाएं!)
StarTraX

यह काम करता है: (var i = 0; i <localStorage.length; ++ i) {कंसोल.लॉग (localStorage.key (i) + ":" + localStorage.getItem (localStorage.key (i))); }
स्टारटैक्स

1

localStorageएक है Object

हम किसी अन्य ऑब्जेक्ट की तरह ही जावास्क्रिप्ट के साथ / स्टेटमेंट में इसके माध्यम से लूप कर सकते हैं ।

और हम .getItem()प्रत्येक कुंजी (x) के मान को एक्सेस करने के लिए उपयोग करेंगे ।

for (x in localStorage){
    console.log(localStorage.getItem(x));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.