2017-02-23 29 views
2

Я хотел создать строку, которая может быть сохранена в localstorage, чтобы я мог добавить, удалить позже. Я хотел создать свою строку json в этом формате.Создание правильной строки json для хранения в localstorage

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

Но проблема заключается в, когда пользователь нажимает на добавить в корзину первый раз, она хранится в локальном хранилище как объект, и когда пользователь нажимает на добавить в корзину снова второй список хранится как массив

ответ

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

не работает, вар frmTaxYear = { "CategoryDisplayText": CategoryDisplayText.text(), "CategoryId": CategoryId.val(), "taxyear" : taxyearObj }; – user1681166

+0

taxyearObj будет сгенерирован в петле foreach. – user1681166

+0

@ user1681166 Да, код, который генерирует 'taxyearObj', должен оставаться неизменным. этот ответ заменяет ваш оператор 'if' – FuzzyTree