2013-08-02 52 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); 
     } 
    } 
} 
相關問題