我在localStorage中存储了一堆值。其中包含JSON对象的数组是特定的。 当我想向该数组添加另一个对象时,我是如何拉它,解析它,推入数组并再次设置它。
var clickedItem = sessionStorage.getItem('location'),
interest = [],
interests = localStorage.getItem('interests');
interestsParsed = JSON.parse(interests);
interestsParsed.push(clickedItem);
localStorage.setItem('interests', JSON.stringify(interestsParsed));
稍后如果我拉出数组并循环遍历数组,我的属性是未定义的。
var data = JSON.parse(localStorage.getItem('interests'));
for(var i = 0, j = data.length; i < j; i++ ){
console.log(data[i].anything); // any property is undefined
}
PS。当我控制它时,JSON对象看起来完全正常。任何想法为什么道具将被定义?
更新 数据实际上是一个数组,循环通过它确实给了我内部的每个值。但是,数组中的每个JSON对象不再是对象,必须是JSON.parsed才能从字符串中“重新创建”一个对象。
这是关于在localStorage中的数组中存储JSON对象的一个非常好的教训。
var data = JSON.parse(localStorage.getItem('interests'));
for(var i = 0, j = data.length; i < j; i++ ){
console.log(data[i].anything); // any property is undefined
var obj = JSON.parse(data[i]); // parse it instead
console.log(obj.title); // use it as an object now
}
答案 0 :(得分:1)
我的假设是你试图lines = File.ReadAllLines(RecentFiles);
List< ToolStripMenuItem > items = new List< ToolStripMenuItem >();
using (StreamWriter writer = new StreamWriter(RecentFiles))
{
for (int i = 0; i < lines.Length; i++)
{
if (File.Exists(lines[i])) {
writer.WriteLine(lines[i]);
items.Add(new ToolStripMenuItem()
{
Text = lines[i]
});
}
}
}
一个复杂的对象,可能类似于DOM对象或其他内置API的对象。会发生什么是stringify
将从所有方法中剥离对象,这包括内部setter和getter,并且你仍然使用空(或几乎为空)对象。
在这种情况下,我的解决方案是将复杂对象解析为一个简单的对象,其中只包含您选择的格式化所需的属性。
答案 1 :(得分:0)
JSON.parse()
会返回object
,但您将其视为array
。不是推送到数组,而是向对象添加一个新项目。
答案 2 :(得分:0)
localStorage仅支持字符串。使用JSON.stringify()和JSON.parse()。
//demo value
var clickedItem = {"testValue":111};
var interests = [{'a':1},{'b':2},{'c':4}];
localStorage.setItem('interests', JSON.stringify(interests));
//demo value end
interest = [],
interests = localStorage.getItem('interests');
interestsParsed = JSON.parse(interests);
interestsParsed.push(clickedItem);
console.log(interestsParsed);
localStorage.setItem('interests', JSON.stringify(interestsParsed));
var data = JSON.parse(localStorage.getItem('interests'));
for(var i = 0, j = data.length; i < j; i++ ){
console.log(data[i]);
}
我认为你没有确定利益的价值,(在第3行获得价值之前)