创建一个数组并使用JavaScript将其存储在sessionStorage中?

时间:2014-03-01 21:04:17

标签: javascript arrays sessionstorage

我正在执行一项任务,要求我们从伪造的数据库阵列中将对象添加到假购物车阵列,然后转到显示“购物车”中所有内容的购物车页面。现在,这一切都很好,但由于某种原因,我不能在fakeCart数组中显示多个对象。

相当确定问题出现在这个函数中,因为一切都以其他方式正确显示。

所以,事实证明我发布了我正在修改的代码。我已经将它更新为几乎正常工作的那个。

function addToCart(e) {
'use strict';

var fakeCart = [];

for (var i = 0; i < fakeDatabase.length; i++) {
    if (fakeDatabase[i].id == e.currentTarget.id) {
        fakeCart.push(fakeDatabase[i]);
    }
}

sessionStorage.fakeCart = JSON.stringify(fakeCart);
}

基本上,我可以让代码使一个对象从一个数组(数据库)转到另一个数组(数据库),但每当我尝试添加一个对象时,只需替换最后一个。

2 个答案:

答案 0 :(得分:0)

代码会覆盖sessionStorage.fakeCart的任何现有值,因此序列化数组中永远不会有多个元素。您可以通过从sessionStorage读取值来解决此问题,而不是每次都创建新列表。

function addToCart(e, productNum) {
    'use strict';

    // change this
    var fakeCart = JSON.parse(sessionStorage.fakeCart) || [];

    for (var i = 0; i < fakeDatabase.length; i++) {
        if (fakeDatabase[i].id == e.currentTarget.id) {
            // and this
            fakeCart.push(fakeDatabase[i]);
        }
    }

    sessionStorage.fakeCart = JSON.stringify(fakeCart);
}

答案 1 :(得分:-1)

我想:

而不是

fakeCart[i].push(fakeDatabase[i]);

你需要这个

fakeCart.splice(i, 0, fakeDatabase[i]);