2016-05-16 112 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。 希望这可以帮助你。