2017-09-21 1 views
0

Ich möchte jeden Schlüssel durchlaufen und den name Wert von jedem Schlüssel erhalten. So sieht meine LocalStorage aus.LocalStorage: Holen Sie sich jeden Wert von jedem Schlüssel

key: 3 Value: {"name":"Kevin","country":"Canada","about":"Test","image":""}

key: 4 Value: {"name":"Homer","country":"Canada","about":"Test","image":""}

Ich möchte getboth dieser Namen und sie zu meinem Array hinzufügen. Ich versuchte es mit dieser Methode:

for(var key in localStorage){ 
    let user = JSON.parse(localStorage.getItem(key)); 
    this.users.push(user); 
} 

Fehler ich erhalte, ist:

SyntaxError: Unexpected token e in JSON at position 1

+0

Sie verwenden 'JSON.stringify', bevor Sie einen Wert speichern mit' setItem'? –

+0

Fehlende Anführungszeichen für _name_ –

+0

ja ich bin 'localStorage.setItem (this.getId(), JSON.stringify (Wert));' – Amar

Antwort

0

wenn Sie sagen, dass ich diesen Namen getboth will, ich verstehe es nicht, aber so oder so können Sie versuchen, so etwas wie:

var keys = Object.keys(localStorage); 
for(var i=0;i<keys.length;i++){ 
    var key = keys[i]; 
    console.log(key, localStorage[key]); 
    //store here "both names" where you want them 
    //you can also access each element with localStorage[key].name, localStorage[key].country, etc. 
} 
-2

schaffe ich es zu lösen, war ein einfacher Fehler, indem sie immer einen neuen let user innerhalb der Schleife zu initialisieren.

Ich zog die user aus und der Rest des Codes funktioniert.

user: any; 

    getUsers():void{ 
    for(var key in localStorage){ 
     this.user = JSON.parse(localStorage.getItem(key)); 
     this.users.push(this.user); 
    } 
    } 
+2

erhalten Dies ist definitiv nicht mit _SyntaxError verbunden: Unerwartetes Token e in JSON an Position 1_ –

+1

Dieser Code macht keinen Sinn. Eine fehlerhafte Eigenschaft mit dem Namen "user", die sich auf ein beliebiges Element von "users" _if bezieht und nur wenn "getUsers" unter bestimmten Umständen aufgerufen wird, ist ein schlechtes Design. Es ist nichts falsch mit der lokalen Variablendeklaration in Ihrem ursprünglichen Code. Wenn dies Ihren Fehler behebt, haben Sie irgendwo anders einen schwerwiegenden Fehler. –

1
var keys = Object.keys(localStorage); 
keys.forEach(key=>{ 
    var json_str =localStorage.getItem(key) 
    try { 
     var abc = JSON.parse(json_str); 
     this.user = abc; 
    } catch (e) { 
    console.log(e) 
    } 
}) 
0

Dies ist eine Verfeinerung der Robert's answer.

Geben Sie einfach alle Werte (die Schlüssel selbst sind nicht wichtig) in localStorage, die eine name -Eigenschaft haben, die eine Zeichenfolge ist. Dann gebe das Array zurück.

Basierend auf Ihrer eigenen Antwort haben Sie wahrscheinlich einen inkonsistenten veränderbaren Status, da das Verschieben Ihrer temporären Variablen in den Instanzbereich sich nicht auf Ihre Situation auswirken sollte.

function getUsers() { 
    return Object.values(localStorage) 
    .map(json => { 
     try { 
     return JSON.parse(json); 
     } 
     catch (e) { 
     return undefined; 
     } 
    }) 
    .filter((user?: any): user is {name: string} => user && typeof user.name === 'string'); 
} 

const users = getUsers(); 
0

Sie betrachten kann meine Bibliothek ngx-store mit mit localstorage, session, Kekse und ein bisschen mehr in Eckige beschäftigen. Um das zu erreichen, was Sie wollen, werden Sie ganze Array im Speicher speichern können oder einfach nur Code verwenden, wie unten mit Ihrer aktuellen Datenstruktur:

import { LocalStorageService } from 'ngx-store'; 

export class Example { 
    public users: Array<any> = []; 

    constructor(public localStorageService: LocalStorageService) { 
    this.localStorageService.utility.forEach((value, key) => this.users.push(value)); 
    } 
} 

Wirklich, kann es nur so einfach sein;)

0

Sie kann die Methode hasOwnProperty('propertyName') verwenden, um den Namen zu prüfen, der im Objekt verfügbar ist oder nicht. Führen Sie dann die gewünschte Operation aus.

let localStorage = { 
 
    "key1": {"name":"Kevin","country":"Canada","about":"Test","image":""}, 
 
    "key2": {"name":"Homer","country":"Canada","about":"Test","image":""} 
 
} 
 
for(let key of Object.keys(localStorage)){ 
 
    if(localStorage[key].hasOwnProperty('name')){ 
 
     console.log(localStorage[key]['name']); 
 
    } 
 
}

Verwandte Themen