2016-05-16 5 views
0

localStorageからJson文字列を取り出し、新しい料理を追加しようとしています。誰かが私を助けてください、それはする必要がありますように動作していません。使用していますTypeScriptJsonを解析して配列に追加

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)); 
    } 
} 

期待される動作:ディッシュがうまく追加されたら、それがさらなる操作のためのlocalStorageに保存する必要があります。

+1

予想される動作は何ですか? –

+0

は質問に予想される動作を追加しました。コードに応じて –

+0

を追加する必要があります。しかし、以前のアレイ構造は壊れています。 'array1.push(array2)'はあなたが期待することをしません。 'array1 = array1.concat(array2)'はあなたが探しているものです –

答えて

0

javascriptの配列には、連結するために別の操作が必要です。 array1.push(array2)は配列をオブジェクト(1項目)としてarray1にプッシュします。

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

javascriptには、機能Array.prototype.concatがあります。 array1 = array1.concat(array2)のようになります。 concatは、呼び出された配列を変更しないことに注意してください。新しい配列を返します。

また、空のlocalStorageのためのあなたの投稿コードでは、dishは二回 を追加し、私はそれが何か以下のように作ると思います:

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

JSON.parse(localStorage.getItem)では、通常、JSONオブジェクトを取得します。 であり、その値は例のような配列になります。

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); 

これに従う必要があります。

しかし、あなたは問題を引き起こしているかもしれないディッシュリストにオブジェクトを直接プッシュしていると思います。

私はTypescriptにあまり触れていないので、例は純粋なjavascriptになっています。 これがあなたを助けてくれることを願っています。