2016-11-02 2 views
0

Ich habe ein einzelnes Paar Schlüssel und Wert in einem localStorage gespeichert. Ich möchte alle Datensätze dort in ein Array gespeichert setzen:Unerwünschte Daten von localStorage mit mehreren Browsern

function fillRecordArray(){ 
    recordArr.splice(0,recordArr.length); 
    for(var i in localStorage) 
    { 
     var record = new Record(i,localStorage[i]); 
     recordArr.push(record); 
    } 
} 

, die perfekt funktioniert gut, bis ich Chrome zu verwenden, gestoppt und getestet es auf Mozilla. In diesem Fall habe ich neben der Daten-I gespeichert Ich habe auch 6 zusätzliche Array-Elemente mit diesen Werten:

1 
function key() { [native code] } 
function getItem() { [native code] } 
function setItem() { [native code] } 
function removeItem() { [native code] } 
function clear() { [native code] } 

Was dieses Problem verursachen kann und ist es eine Möglichkeit, es zu vermeiden, außer es nur aus einem Array Strippen?

Vielen Dank im Voraus.

+1

[ Warum ist "for ... in" mit Array-Iteration eine schlechte Idee?] (Http://stackoverflow.com/q/500504/21 5552) –

+0

Hilft das? https://stackoverflow.com/questions/684672/how-do-i-loop-through-o-en-umerate-a-javascript-object – Amy

Antwort

0

Verwenden Sie eine For-Schleife, um über die Länge von localStorage zu iterieren, keine For-In-Schleife.

for(var i=0; i<localStorage.length; i++){ 
    var record = new Record(i, localStorage.getItem(localStorage.key(i))); 
    recordArr.push(record); 
} 

Allerdings würde ich es vorziehen, um die Datensätze in einem einzigen Behälter in localstorage zu speichern, anstatt sie als Root-Schlüssel haben.

Zum Beispiel:

// store the array 
localStorage.setItem('records', JSON.stringify(recordsArr); 

// retrieve the array 
var retrievedRecords = localStorage.getItem('records'); 
if(retrievedRecords){ 
    retrievedRecords = JSON.parse(retrievedRecords); 
} else { 
    retrievedRecords = []; 
} 
+0

Vielen Dank für den Tipp. –

0

Firefox gibt Ihnen ein Storage-API-Objekt: . Das ist von Entwurf, also glaube ich nicht, dass es einen Weg gibt, es zu vermeiden.

Wenn Sie die zusätzlichen Funktionen entfernen möchten, können Sie versuchen, Ihren Wert als einen bestimmten Typ zu verwenden.

Interessant ist, dass Chrome auch WebAPI implementiert. Wenn Chrome diese Funktionen nicht zurückgibt, sollten Sie überprüfen, wie Sie auf "record" zugreifen. Etwas könnte seinen Typ ändern.

0

Verwenden Object.keys(), Array.prototype.forEach()

var keys = Object.keys(localStorage); 

keys.forEach(function(key) { 
    // do stuff 
    console.log(localStorage[key]); 
    var record = new Record(key, localStorage[key]); 
    recordArr.push(record); 
}) 
0

Dies sollte in beiden Browsern funktionieren ... "hasOwnProperty" trennt die Daten von den Funktionen

recordArr = []; 
for(var i in localStorage) 
{ 
    if (localStorage.hasOwnProperty(i)) 
    { 
    recordArr.push(i); 
    } 
} 
Verwandte Themen