Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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数组_Javascript_Arrays_Storage_Local Storage_Indexeddb - Fatal编程技术网

如何存储javascript数组

如何存储javascript数组,javascript,arrays,storage,local-storage,indexeddb,Javascript,Arrays,Storage,Local Storage,Indexeddb,我希望能够在本地用JavaScript存储一个数组,以便脱机使用,例如在indexedDB和localStorage中。但是,我知道localStorage只存储字符串,indexedDB只存储对象。我知道我可以用JSON序列化数组并将其存储在localStorage中,但我想知道是否有更正式的方法来实现这一点。您使用JSON序列化数组并将其存储在localStorage中是正确的 要存储它,请执行以下操作: localStorage['foo'] = JSON.stringify(foo);

我希望能够在本地用JavaScript存储一个数组,以便脱机使用,例如在indexedDB和localStorage中。但是,我知道localStorage只存储字符串,indexedDB只存储对象。我知道我可以用JSON序列化数组并将其存储在localStorage中,但我想知道是否有更正式的方法来实现这一点。

您使用JSON序列化数组并将其存储在localStorage中是正确的

要存储它,请执行以下操作:

localStorage['foo'] = JSON.stringify(foo);
要检索它,请执行以下操作:

var foo = JSON.parse(localStorage['foo']);

我假设您知道这在较旧的浏览器(即Internet Explorer 6/7)中不起作用。

是的,您几乎可以从localStorage进行字符串化和解析。我用这个助手

var _localStorage = {};

_localStorage.set = function(n, o){
  localStorage.setItem(n, JSON.stringify(o||{}));
}

_localStorage.get = function(n){
    return JSON.parse(localStorage.getItem(n));
}

_localStorage.array = function(n, f, p){
    var arr = _localStorage.get(n) || [];
    arr[f](p); _localStorage.set(n, arr);
}

// test

_localStorage.set('cfg', {name:'pro'});
console.log(_localStorage.get('cfg'));

_localStorage.set('cfg', [{name:'pro'}]);
_localStorage.array('cfg', 'push', {name:'flav'});
console.log(_localStorage.get('cfg'));

您可能对HTML5离线存储之类的东西感兴趣:


关于在Javascript中“序列化”对象的方法,您只需保持Javascript对象使用的JSON形式即可实现这一点。

正如其他答案所说,使用localStorage的JSON似乎就是实现这一点的方法。但是,这似乎是最好的方法:

_localStorage={
    getItem: function(key){
        var value=localStorage.getItem(key);
        try{
            unJSON=JSON.parse(value);
            return unJSON;
        }
        catch(e){
            return value;
        }
    },
    setItem: function(key,value){
        if(typeof value!=='string'){
            var JSONned=JSON.stringify(value)
            localStorage.setItem(key,JSONned);
        }
        else{
            localStorage.setItem(key,value);
        }
    }
}

我认为序列化为JSON是实现这一点的官方方式。有没有办法在indexedDB中实现这一点?带有JSON的localStorage可以工作,但indexedDB可能更方便。据我所知,indexedDB是一个键/值对数据库,其中的值可以是。也许试着把一个数组作为一个值,看看会发生什么?你想做什么?我可以告诉你indexedDB比localStorage快得多,可以存储更多的数据(localStorage=max 5MB),但是indexedDB的支持较少。。。顺便说一句,在indexedDB中,您有两种解决方案。您可以将数组作为对象存储在objectstore中,也可以将数组中的所有项单独作为对象存储在对象存储中我想将其作为对象存储在对象存储中。localStorage很好,但indexedDB更适合于这种特定情况,但要修改它,我不能使用localStorage['foo']。push('hello')之类的东西,对吗?我必须从localStorage获取它,解析它,修改它,将它字符串化,然后再次将它添加到localStorage。这很好,但我更喜欢别的东西。@Markasoftware我真的不知道,但我想你不能这么做。您可能需要检索它,解析JSON,修改它,再次在JSON中序列化它,然后存储它。不过我可能错了。IE6/7中不支持localStorage,所以这些浏览器中不需要JSON是的,我已经忘记了!我想在这种情况下是无法支持IE 6/7的。如果不是localStorage中的所有项都是数组呢?您可以在对象或数组上使用.get()和.set()。array()只是一个辅助函数,因此如果您存储数组,则可以执行此操作_set('cfg',[{name:'pro'}])_数组('cfg','push',{name:'flav'});--不必这样做——var arr=_localStorage.get('cfg');arr.push({name:'flav'})_localStorage.set('cfg',arr);