2013-08-02 55 views
0

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

+2

我认为序列化为JSON *是官方的做法。 –

+0

有没有办法在indexedDB中做到这一点?使用JSON的localStorage可以工作,但是indexedDB可能更方便。 – Markasoftware

+1

据我所知,IndexedDB是一个键/值对数据库,其值可以是[any object](https://developer.mozilla.org/en-US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB)。也许尝试把一个数组作为一个值,看看会发生什么? –

回答

1

是的,你几乎从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')); 
+0

看起来不错!只是在等待接受定时器。 – Markasoftware

+0

如果不是所有localStorage中的项目都是数组呢? – Markasoftware

+0

您可以在对象或数组上使用.get()和.set()。 .array()只是一个辅助函数,所以如果你正在存储一个数组,所以你可以这样做.. _localStorage.set('cfg',[{name:'pro'}]); _localStorage.array('cfg','push',{name:'flav'}); - 而不是必须这样做 - var arr = _localStorage.get('cfg'); arr.push({名称: '托利'}); _localStorage.set('cfg',arr); –

1

您对使用JSON进行序列化并将其存储在localStorage中是正确的。

存储它:

localStorage['foo'] = JSON.stringify(foo); 

,并检索它:

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

我想大家都知道,这不会在旧的浏览器(即Internet Explorer的6/7)工作。

+0

但修改它我不能使用localStorage ['foo']。push('hello')和类似的东西,是否正确?我将不得不从localStorage中获取它,解析它,修改它,对其进行字符串化,然后再次将它添加到localStorage。这很好,但我更喜欢别的东西。 – Markasoftware

+0

@Markasoftware我真的不知道,但我认为你不能那样做。您可能需要检索它,解析JSON,修改它,再次使用JSON序列化它,然后存储它。虽然我可能是错的。 – federicot

+0

localStorage在IE6/7中不支持,所以这些浏览器中的JSON将不是必需的 – Markasoftware

0

正如其他答案所说,它看起来像JSON和localStorage是做到这一点的方式。但是,这看起来像是最好的方式:

_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); 
     } 
    } 
} 
相关问题