我有一个日历。在其代码中,有一个Object和一个JSON,它包含几个属性,如
[{"Date":"17-3-2015","Event":"Test drive","Participants":"John, George","Description":"Testing a new F30"},
{"Date":"17-3-2015","Event":"Football match","Participants":"FCSM vs FCKK","Description":"New season start"},
{"Date":"25-3-2015","Event":"Jane's Birthday","Participants":"Jane, John, Richard, Alice","Description":"Celebration with my friends"}]
但由于该数据在localStorage中,我通过
检索它var existEvents = JSON.parse(localStorage.getItem('events'));
for(i=0; i<existEvents.length; i++) {
var item = localStorage.getItem(localStorage.key(i));
console.log(item);
};
existEvents
=我的日历中的每个新活动
console.log(item);
会返回上面输入的数据。
我需要的是检索每个Date值(= key)。所以我假装
item.Date
必须有效,但事实并非如此。和
一样item[0].value
我在阅读了这个问题+答案之后试过了 Access / process (nested) objects, arrays or JSON
我做错了什么?请帮忙!
答案 0 :(得分:3)
使用Array.ForEach()的好方法,它也可以用于循环第二个参数值为第一个参数和键(如果存在)的对象。在您的示例中,for each获取此数组,并在其上循环,一次检索一个对象。
此对象中包含Date
键,因此您可以使用obj.key
访问它。但是,最好使用.hasOwnProperty
来检查密钥是否首先存在。
您还可以使用forEach
循环对象键,然后您就可以拥有obj/key
。例如,从数组循环中循环每个obj
将为您提供obj => 17-3-2015 | key => Date
...等。
var x = [{"Date":"17-3-2015","Event":"Test drive","Participants":"John, George","Description":"Testing a new F30"},
{"Date":"17-3-2015","Event":"Football match","Participants":"FCSM vs FCKK","Description":"New season start"},
{"Date":"25-3-2015","Event":"Jane's Birthday","Participants":"Jane, John, Richard, Alice","Description":"Celebration with my friends"}];
x.forEach(function(obj,key){console.log(obj.Date) });
您的代码可以是:
JSON.parse(localStorage.getItem('events')).forEach(function(obj,key){console.log(obj.Date) });
答案 1 :(得分:1)
我不认为你需要回到for循环中的localstorage,因为你已经在变量existsEvents中拥有了所有数据。
var existEvents = JSON.parse(localStorage.getItem('events'));
for(i=0; i<existEvents.length; i++) {
var item = existEvents[i];
console.log(item);
};
答案 2 :(得分:1)
HTML5 LocalStorage是一个关联数组存储,getItem
函数抓取其中一个项目。所以,
localStorage.getItem ("somekey")
返回设置为somekey
的变量。在您的代码片段中,您在localStorage
中存储的变量是恰好是JSON格式的String。 JSON.parse ()
将JSON转换为您已存储的String所代表的实际数组。
var existEvents = JSON.parse (localStorage.getItem ('events'));
for (var i = 0; i < existEvents.length; i++) {
var item = existEvents [i];
console.log(item);
};
existEvents
是一个Array对象,因此您可以像平常一样访问它。在您从localStorage
检索并解析后,您不再需要访问localStorage.getItem
。