创建适当的json字符串以存储在localstorage中

时间:2017-02-23 04:51:42

标签: javascript jquery json local-storage

我想创建一个可以存储在localstorage中的字符串,以便我可以在以后添加,删除。 我想用这种格式创建我的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));
  }
}

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

1 个答案:

答案 0 :(得分:0)

您正在将阵列推入阵列。避免这种情况的一种方法是将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));