我希望能夠在本地存儲一個數組,以便脫機使用,例如在indexedDB和localStorage中使用。但是,我明白localStorage只存儲字符串和indexedDB只存儲對象。我知道我可以只是JSON序列化數組並將其存儲在localStorage中,但我想知道是否有更多的官方方式來做到這一點。如何存儲數組javascript
回答
是的,你幾乎從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'));
看起來不錯!只是在等待接受定時器。 – Markasoftware
如果不是所有localStorage中的項目都是數組呢? – Markasoftware
您可以在對象或數組上使用.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); –
您對使用JSON進行序列化並將其存儲在localStorage中是正確的。
存儲它:
localStorage['foo'] = JSON.stringify(foo);
,並檢索它:
var foo = JSON.parse(localStorage['foo']);
我想大家都知道,這不會在舊的瀏覽器(即Internet Explorer的6/7)工作。
但修改它我不能使用localStorage ['foo']。push('hello')和類似的東西,是否正確?我將不得不從localStorage中獲取它,解析它,修改它,對其進行字符串化,然後再次將它添加到localStorage。這很好,但我更喜歡別的東西。 – Markasoftware
@Markasoftware我真的不知道,但我認爲你不能那樣做。您可能需要檢索它,解析JSON,修改它,再次使用JSON序列化它,然後存儲它。雖然我可能是錯的。 – federicot
localStorage在IE6/7中不支持,所以這些瀏覽器中的JSON將不是必需的 – Markasoftware
你可能會像HTML5離線存儲感興趣:http://www.html5rocks.com/en/tutorials/offline/storage/
關於「串行化」在Javascript對象的方式,可以實現通過簡單地保持JSON形式主義由Javascript對象使用。
正如其他答案所說,它看起來像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);
}
}
}
- 1. Javascript - 數組如何在內部存儲?
- 2. JavaScript存儲數組值
- 3. Javascript數組存儲過程
- 4. Javascript鍵值數組存儲
- 5. 如何存儲數組?
- 6. 如何將JavaScript存儲到JavaScript數組中
- 7. 一個javascript數組的內存存儲
- 8. 存儲數據的JavaScript數組
- 9. 在JavaScript數組中存儲數據
- 10. 如何在JavaScript中的二維數組中存儲隨機數?
- 11. 如何/創建一個2d數組來存儲整數,jQuery/javascript
- 12. 如何在mysql數據庫中存儲多維javascript數組
- 13. 數組如何存儲在內存中?
- 14. 如何將本地存儲中的值存儲在數組中,JavaScript?
- 15. Python:如何在Google App Engine數據存儲中存儲數組
- 16. 節點:如何存儲JSON數組在谷歌數據存儲
- 17. 如何將數據存儲爲本地存儲中的數組?
- 18. 將變量存儲到數組中javascript
- 19. 在數組中存儲javascript變量
- 20. JavaScript數組中存儲的值
- 21. 在javascript數組中存儲JSON值
- 22. 如何獲取存儲在javascript中的數組對象的值
- 23. 如何將數組存儲在localStorage(Javascript)中的JSON?
- 24. 如何將圖像存儲在數組中(javascript)?
- 25. 如何HTML標題存儲在JavaScript數組
- 26. 如何在JavaScript中將值存儲到嵌套數組中?
- 27. 的Javascript如何推進項目到存儲在對象數組
- 28. JavaScript:如何將對象存儲在數組中?
- 29. 如何使用javascript將對象存儲在數組中
- 30. Javascript如何在數組內存儲信息?
我認爲序列化爲JSON *是官方的做法。 –
有沒有辦法在indexedDB中做到這一點?使用JSON的localStorage可以工作,但是indexedDB可能更方便。 – Markasoftware
據我所知,IndexedDB是一個鍵/值對數據庫,其值可以是[any object](https://developer.mozilla.org/en-US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB)。也許嘗試把一個數組作爲一個值,看看會發生什麼? –