【问题标题】:creating proper json string to store in localstorage创建正确的 json 字符串以存储在本地存储中
【发布时间】:2017-07-13 10:27:33
【问题描述】:

我想创建一个可以存储在本地存储中的字符串,以便以后添加、删除。 我想以这种格式创建我的 json 字符串。

var frmTaxYear = [{
"CategoryDisplayText": abc,
  "CategoryId": 1,
  "taxyear": {
    "taxYearId": 1,
    "taxYearDisplayText": abc
  }
}]
[{
  "CategoryDisplayText": abc2,
  "CategoryId": 2,
  "taxyear": {
    "taxYearId": 2,
    "taxYearDisplayText": abc1
  }
}]

我写的代码是

function addToCart() {
  var taxyearObj = [];
  $('[name="Taxyear"]:checked').map(function() {
    taxyearObj.push({
      "taxYearId": this.value,
      "taxYearDisplayText": $('label[id=' + this.id + ']').text()
    });

  });
  if (localStorage.getItem("taxyear") !== null) {

    //  findAndRemove(localStorage.getItem("taxyear"), 'CategoryId', CategoryId.val());
    var frmTaxYear = [{
      "CategoryDisplayText": CategoryDisplayText.text(),
      "CategoryId": CategoryId.val(),
      "taxyear": taxyearObj
    }];
    var storedTaxyear = JSON.parse(localStorage.getItem("taxyear"));
    storedTaxyear.push(frmTaxYear);
    localStorage.setItem("taxyear", JSON.stringify(storedTaxyear));
  } else {
    var frmTaxYear = [{
      "CategoryDisplayText": CategoryDisplayText.text(),
      "CategoryId": CategoryId.val(),
      "taxyear": taxyearObj
    }];
    localStorage.setItem('taxyear', JSON.stringify(frmTaxYear));
  }
}

但问题是当用户第一次单击添加到购物车时,它作为对象存储在本地存储中,当用户再次单击添加到购物车时,第二个列表存储为数组

【问题讨论】:

    标签: javascript jquery json local-storage


    【解决方案1】:

    你将一个数组推到一个数组上。避免这种情况的一种方法是将taxyear 初始化为[](如果它为空)并始终推送一个对象。那你就不用定义frmTaxYear两次了:

    if (localStorage.getItem("taxyear") == null) {
        localStorage.setItem("taxyear", JSON.stringify([]));
    } 
    
    var frmTaxYear = {
        "CategoryDisplayText": CategoryDisplayText.text(),
        "CategoryId": CategoryId.val(),
        "taxyear": taxyearObj
    };
    
    var storedTaxyear = JSON.parse(localStorage.getItem("taxyear"));
    storedTaxyear.push(frmTaxYear);
    localStorage.setItem("taxyear", JSON.stringify(storedTaxyear));
    

    【讨论】:

    • 不工作 ,var frmTaxYear = { "CategoryDisplayText": CategoryDisplayText.text(), "CategoryId": CategoryId.val(), "taxyear": taxyearObj };
    • taxyearObj 将在 foreach 循环中生成。
    • @user1681166 是的,生成taxyearObj 的代码应该保持不变。这个答案取代了你的if 声明
    • 得到错误:在行storedTaxyear.push(frmTaxYear);未捕获的类型错误:storedTaxyear.push 不是函数
    • @user1681166 查看更新。您可能需要重置本地存储
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2021-06-24
    • 2011-07-13
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多