2016-05-16 15 views
0

Der Versuch, die Json-Zeichenkette von localStorage abzurufen und eine neue Platte anzuhängen. Es funktioniert nicht wie es soll, kann mir bitte jemand helfen. Verwende TypeScript.An ein Array durch JSon-Analyse anhängen

interface Dish { 
    id: number; 
    name: string; 
    desc: string; 
    price: number; 
}; 

export class BasketService { 
    private BASKET: string = 'basket'; 

    log(dish: Dish) { 

     var dishList: Dish = []; 

     if (!localStorage.getItem(this.BASKET)) { 
      dishList.push(dish); //push the first dish (if local storage is empty) 
     } 

     //Append an injected dish to the existing local storage. 
     dishList.push(JSON.parse(localStorage.getItem(this.BASKET))); 
     dishList.push(dish); 

     localStorage.setItem(this.BASKET, JSON.stringify(dishList)); 
    } 
} 

Erwartetes Verhalten: Sobald die Schale schön angehängt wird, dann sollte es für die weitere Manipulation in der localstorage gespeichert werden.

+1

was ist das erwartete Verhalten? –

+0

hat der Frage das erwartete Verhalten hinzugefügt. –

+0

nach Ihrem Code sollte es hinzugefügt werden. Die vorherige Array-Struktur ist jedoch ruiniert. 'array1.push (array2)' tut nicht, was Sie erwarten. 'array1 = array1.concat (array2)' ist das, was du suchst –

Antwort

0

Arrays in JavaScript erfordern eine andere Operation zum Verketten. array1.push(array2) schiebt Array als ein Objekt (1 Element) in array1.

var array1 = [1, 2, 3]; 
var array2 = [4, 5, 6]; 
array1.push(array2);//[1, 2, 3, [4, 5, 6]] 

In Javascript gibt es eine Funktion Array.prototype.concat. Sollte wie array1 = array1.concat(array2) aussehen. Beachten Sie, dass concat das Array nicht ändert, an dem es aufgerufen wird. Stattdessen gibt es das neue Array zurück.

Außerdem in geposteten Code für die leeren localStorage wird dish zweimal hinzugefügt Ich würde es wie unten etwas machen:

var json = localStorage.getItem(this.BASKET); 
    if (!json) { 
     dishList = [dish]; 
    } else { 
     dishList = JSON.parse(json); 
     dishList.push(dish); 
    } 
    localStorage.setItem(this.BASKET, JSON.stringify(dishList)); 
0

Wenn Sie JSON.parse (localStorage.getItem) ausführen, erhalten wir normalerweise ein JSON-Objekt. und sein Wert wird ein Array wie ein Beispiel sein.

var dish = []; 
var test = JSON.parse(localStorage.getItem("dummy")); 
// test = {a : ['aa','bb','cc']} 
dish = test.a; 
dish.push('dd'); 
test.a = JSON.stringify(dish); 
localStorage.setItem("dummy",test); 

Wir müssen folgen.

Aber ich denke, Sie schieben das Objekt direkt in die Dishlist, die das Problem verursachen könnte.

Das Beispiel ist in reinem Javascript, da ich wenig Exposition gegenüber Typoskript. Hoffe das hilft dir.

Verwandte Themen