在Jquery中创建或更新cookie数组

时间:2016-02-24 10:44:05

标签: javascript jquery html cookies

如果值为0,我想创建,如果值为1则更新。

所以我写了这个,

var juiceCart = [{
    'name': val,
    'count': unTouch
}];
if (value == 0) {
    console.log('create cookie');
    $.cookie("juiceCart", JSON.stringify(juiceCart));
    doDummyCall();
} else {
    console.log('update cookie');
    $.cookie("juiceCart", JSON.stringify(juiceCart));
    doDummyCall();
}

doDummyCall()

我正在进行ajax调用以更新标头和

var cookieJuiceCart = $.parseJSON($.cookie("juiceCart"));
$.each(cookieJuiceCart, function (index, value) {
    console.log('Id : ' + value.name);
    console.log('Value : ' + value.count);
});

然后在每个函数中打印cookie以了解其中的所有项目。

如果我添加第一项,则表示正在打印

Id:1 价值:1

然后,如果我添加第二项正在打印

同上:2 价值:1

但我期待的是

Id:1 价值:1 Id:2 价值:1

我知道旧值已被替换,因为我没有推动其中的值。

所以,我做了

juiceCart.push({'name': val, 'count': unTouch});

但它只是用新的价值取代旧价值。

如何检查数组中是否存在旧值并根据它创建或更新。

2 个答案:

答案 0 :(得分:0)

在我看来,实际问题是你的数组:

var juiceCart = [{
    'name': val,
    'count': unTouch
}];

使用vars更新同一个对象而不是推送新对象。

你可以这样做:

var juiceCart = $.parseJSON($.cookie("juiceCart")) || []; // create a blank array taken from @apokryfos's answer.
juiceCart.push({'name': val, 'count': unTouch}); // <---now push it here.

这样,每次调用它时都可以推送新对象。

答案 1 :(得分:0)

这是我从问题中得到的。它解释得有点糟糕,所以我可能没理解你需要做什么。

var juiceCart = $.parseJSON($.cookie("juiceCart")) || [];
var newItem = true;
juiceCart.each(function (i, v) { 
    if (v.name == val) { v.count++; newItem = false; }
});
if (newItem) {
    juiceCart.push({'name': val, 'count': unTouch});
}
$.cookie("juiceCart", JSON.stringify(juiceCart));
doDummyCall();