2016-05-16 114 views
0

嘗試從localStorage中檢索Json字符串並向其添加新菜。它沒有運行,因爲它應該,有人可以幫助我。我正在使用TypeScript通過解析Json追加到數組

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

我們需要關注這一點。

但我認爲你直接將對象推入Dishlist可能會導致問題。

這個例子是純JavaScript,因爲我沒有太多的暴露Typescript。 希望這可以幫助你。