Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在LocalStorage中构建阵列_Javascript_Jquery_Arrays_Local Storage - Fatal编程技术网

Javascript 在LocalStorage中构建阵列

Javascript 在LocalStorage中构建阵列,javascript,jquery,arrays,local-storage,Javascript,Jquery,Arrays,Local Storage,我正在尝试基于电子商务站点上的产品视图历史在localstorage中构建一个阵列。每次用户查看产品页面时,我都希望将此页面的ID添加到本地存储中的阵列中 var itemArray = []; var myItem = $("li#ref").data("ref"); itemArray.push(myItem); var LS = { set: function (key, val) { return localStorage.

我正在尝试基于电子商务站点上的产品视图历史在localstorage中构建一个阵列。每次用户查看产品页面时,我都希望将此页面的ID添加到本地存储中的阵列中

var itemArray = [];
    var myItem = $("li#ref").data("ref");
    itemArray.push(myItem);
    var LS = {
        set: function (key, val) {
            return localStorage.setItem(key, JSON.stringify(val));
        },
        get: function (key) {
            return JSON.parse(localStorage.getItem(key));
        }
    };
    LS.set("Viewed", itemArray);
我遇到的问题是,它从来没有构建过一个数组——我所看到的最新产品比以前的产品要好,所以我只能得到一个条目

你知道这是否可能实现吗

提前谢谢


Richard

您需要将新值附加到本地存储中存储的现有数组,而不是新的空数组:

var LS = {
    set: function (key, val) {
        return localStorage.setItem(key, JSON.stringify(val));
    },
    get: function (key) {
        return JSON.parse(localStorage.getItem(key));
    }
};

var itemArray = LS.get('Viewed') || [];
var myItem = $("li#ref").data("ref");

if (itemArray.indexOf(myItem) !== -1) {
    itemArray.push(myItem);
}

LS.set("Viewed", itemArray);

您可能还应该检查该值是否已在数组中,以避免重复。

您需要将新值附加到存储在本地存储中的现有数组,而不是新的空数组:

var LS = {
    set: function (key, val) {
        return localStorage.setItem(key, JSON.stringify(val));
    },
    get: function (key) {
        return JSON.parse(localStorage.getItem(key));
    }
};

var itemArray = LS.get('Viewed') || [];
var myItem = $("li#ref").data("ref");

if (itemArray.indexOf(myItem) !== -1) {
    itemArray.push(myItem);
}

LS.set("Viewed", itemArray);

您可能还应该检查该值是否已在数组中,以避免重复。

如果用户习惯性地使用此站点,则可接受的答案将变得非常缓慢。每当用户查看任何内容时,它都会对视图的整个历史进行解析和重新字符串化

写这本书时就考虑到了这一点。你会写:

var store = Rhaboo.persistent("Views");

if (store.views === undefined) //first run
  store.write('views', []);

function onClick(page) { store.views.push(page); }

for (var i = 0; i<store.views.length; i++)
  console.log(store.views[i]);

顺便说一句,我写了rhaboo。

如果用户习惯性地使用这个网站,那么公认的答案会变得非常缓慢。每当用户查看任何内容时,它都会对视图的整个历史进行解析和重新字符串化

写这本书时就考虑到了这一点。你会写:

var store = Rhaboo.persistent("Views");

if (store.views === undefined) //first run
  store.write('views', []);

function onClick(page) { store.views.push(page); }

for (var i = 0; i<store.views.length; i++)
  console.log(store.views[i]);

顺便说一句,我写了rhaboo。

非常感谢这么简单:并且还添加了检查LS.get('Viewed')是否返回非数组的对象(或者在某些初始化状态下插入空数组),因为第一次调用LS.get('Viewed')时,它将返回null。感谢你们两位的帮助,我现在的问题是我从未进入itemArray.push(myItem);在第一个实例中,如果有意义的话,项数组总是[]。非常感谢这么简单:还要添加检查LS.get('Viewed')是否返回不是数组的对象(或者在某些初始化状态下插入空数组),因为第一次调用LS.get('Viewed')时,它将返回null。谢谢你们两位,我现在遇到的问题是我从未进入itemArray.push(myItem);在第一个实例中,如果有意义的话,项数组总是[]。