通过解析Json附加到数组

Append to an array by Parsing Json

本文关键字:数组 Json      更新时间:2023-09-26

试图从localStorage中检索Json字符串,并在其上附加一个新菜。它不能正常工作,有人能帮我吗?我正在使用TypeScript

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

预期行为:一旦Dish被很好地附加,那么它应该被存储在localStorage中以供进一步操作。

javascript中的数组需要连接不同的操作。CCD_ 3将数组作为对象(1项)推送到CCD_。
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));

在这里,在执行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。希望这对你有帮助。