我希望能够在本地存储一个数组,以便脱机使用,例如在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)。也许尝试把一个数组作为一个值,看看会发生什么? –