How do I store an array in localStorage?
如果我不需要localstorage,我的代码将如下所示:
1 2
| var names=new Array();
names[0]=prompt("New member name?"); |
这是可行的。但是,我需要将这个变量存储在localstorage中,结果证明它相当顽固。我试过了:
1 2
| var localStorage[names] = new Array();
localStorage.names[0] = prompt("New member name?"); |
我哪里出错了?
- 我已经发布了一个完整的解决方案,用于在本地存储或会话存储线程中维护数组,这个线程作为的副本关闭,因为Nether线程确实回答了Dave:stackoverflow.com/a/23516713/2208713最初提出的问题。希望它能帮助一些人。
- 处理这种情况的简单方法可以使用OpenDB库非常充分地处理数组、对象。您可以访问以下链接:github.com/pankajbish/opendb
- 如何发音json?
localStorage仅支持字符串。JSON.parse()JSON.stringify()和使用。
1 2 3 4 5 6
| var names = [];
names[0] = prompt("New member name?");
localStorage.setItem("names", JSON.stringify(names));
//...
var storedNames = JSON.parse(localStorage.getItem("names")); |
- IE7和更早版本不支持JSON。
- @Saifbechan不担心IE 6/7,我们在讨论localStorage
- 有人能解释一下你为什么要这么做吗?还有发生了什么事?
- @howdy_mcgee as localStorage只支持字符串,数组必须转换为字符串格式。最好的方法是将它转换成一个JSON数组,因为它很容易在两个状态之间转换(JSON只是一段长的字符串数据)。如果你不明白的话,你可能想读一读关于JSON的文章。:)
- 没有意识到localstorage只保存字符串。这是相当有限的,但我想任何更复杂的事情也需要更安全,可能会持续很长时间。@Jimjimmy1995谢谢!
- 我将在分析前测试localstorage['names']是否返回值,否则将引发错误。
- @乔纳桑东奇,如果你愿意,你可以做点像埃多克斯1〔5〕那样的事情。
- 如何存储多个名称?
- 如果压缩结果字符串,则最多可以存储4倍的数据。参见jsfiddle.net/davidwihl/n12rogcx(使用lz javascript库:pieroxy.net/blog/pages/lz string/index.html)
- @塞弗贝克坎-埃多克斯1〔6〕。
- 我有情况。Array['t1'] = 'Hello'。我无法将Array存储到localStorage。我的情况是,JSON.stringify(Array)将归还[]。什么时候会发生?
在localStorage和sessionStorage只能处理字符串。你可以用默认的存储对象和对象句柄数组对。这就包括脚本和使用新的方法:
1 2 3 4 5 6
| Storage.prototype.setObj = function(key, obj) {
return this.setItem(key, JSON.stringify(obj))
}
Storage.prototype.getObj = function(key) {
return JSON.parse(this.getItem(key))
} |
使用一个数组或对象的localStorage.setObj(key, value)进行保存和localStorage.getObj(key)检索到它。该方法sessionStorage工作的对象。
如果你想用新的方法来访问的存储,每一个值将被转换为JSON字符串,它是在节能和parsed在归国的吸气剂。
组分来源:http://></www.acetous.de/P/152次>
- 如果你需要所有的,你会怎么找回它们?
- 存储对象提供属性"length"来确定保存对象的计数,并提供方法"key(int index)"来获取当前键。所以你可以试试:for (var i = 0; i < localStorage.length; i++) console.log( localStorage.key(i) +" has value" + localStorage[localStorage.key(i)] )。
- @在某些情况下,使用localstorage.length的sebastian可能是错误的,如果该网站也是用于存储内容的localstorage。
- 在迭代localstorage的所有元素时,可以给特定于模块的值加前缀,并删除带有该前缀的所有内容。
- 我在我的解决方案中使用了相同的方法,它为本地存储的工作方式提供了一个最低限度的接口:)github.com/zevero/simplewebstorage
- 我可以通过实现上述概念将浏览器选项卡对象存储在本地存储中吗?
通过使用建议的JSON.stringify()和JSON.parse()!这种罕见的,但也许有可能避免的问题,包括delimiter构件名称(如构件名称three|||bars)。
- 你能给我们看一个更好的选择吗?
- 这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下面留下评论。
- @你在做标记前读过评论吗?
- @是的,是的。从什么时候起,会员的声誉就是违反规则的好理由?事实上,关于推荐删除的自动消息是否特别提到不将评论作为答案,并建议海报等到有足够的声誉发表评论和投票后再发布?海报说这不是一个答案;还有什么证据需要存在?
- @Chieftwopencils:一些历史背景:当我发表这篇评论时,被接受的答案建议用Ian的""进行连接和拆分(注:这个答案不再存在)。因为我认为这个答案实际上是有害的,所以我把我的答案贴了出来。今天,我不再需要回答了(正确的答案被接受了,并且有一个健康的上升的剂量)。我不太熟悉这些指导原则:是否可以/建议删除我的"答案"?
- @jayeff如何通过这个循环检查相应的属性(即firstname=john,lastname=do e,dob=1/1/1989)?我需要做一个检查(如果这些属性与本地存储中的属性匹配,那么调用一个特定的函数)。
这只是创造:
gist.github.com 3854049 https:///
1 2 3 4 5 6 7 8 9 10 11
| //Setter
Storage.setObj('users.albums.sexPistols',"blah");
Storage.setObj('users.albums.sexPistols',{ sid :"My Way", nancy :"Bitch" });
Storage.setObj('users.albums.sexPistols.sid',"Other songs");
//Getters
Storage.getObj('users');
Storage.getObj('users.albums');
Storage.getObj('users.albums.sexPistols');
Storage.getObj('users.albums.sexPistols.sid');
Storage.getObj('users.albums.sexPistols.nancy'); |
- 这是我正在寻找的类型,除了它将遍历所提供对象的键并在每个键中保存(单个)链接值。非常感谢你的鼓舞。
JSON方法的作品,你需要json2.js在线IE 7,与它的工作和它的一个perfectly尽管有评论说它有localstorage在线。它真的看起来像最好的最小二乘解的麻烦。当然,一个脚本可以对所写的东西不一样,但有一个小的json2这一点。
至少有一个与下面的字符串localstorage版本,但你需要有json2.js说因为那是不是由浏览器本身包括:4.0(MSIE 7.0;兼容;Windows NT 6.1 WOW64的三叉戟;;slcc2 .NET CLR/5;;2.0.50727 .NET CLR CLR 3.5.30729;.NET;3.0.30729 BRI / 2;np06 net4.0c;;;。。。。。。。。。。。。。。net4.0e Zune;4.7)(我会用这一评论的回复,但是不能)。
另一个解决方案将是写一包装,存储阵列像这样:
1 2 3 4
| localStorage.setItem('names_length', names.length);
localStorage.setItem('names_0', names[0]);
localStorage.setItem('names_1', names[1]);
localStorage.setItem('names_' + n, names[n]); |
removes高架)转换到JSON的,但如果你需要将annoying删除元素,你将不得不重新索引的数组)
- 杀死非JSonifying的性能增益。
- @卡米洛马丁是的,那可能是真的。:)
- 用names_keys代替names_length,不需要重新索引!这也允许您使用字符串键。当然,这只有在数组元素是hugh的情况下才有意义。
- @如果names_keys包含一系列指数,这不是鸡/蛋的情况吗?
- @正如我所说,这只对休数组元素有意义。例如,如果每个元素有100kb,那么最好在keys中使用一个小条目。
- @皮森伯,休是什么?
- @alixaxel我没有一个确切的数字给你,但是如果事情因为重新索引而放缓,或者你只是不想重建索引,你可能会考虑存储键。或者另一种方法:如果您存储10000个整数值,那么您的索引名称键将比实际数据大。