Javascript迭代本地存储JSON对象(普通Javascript)
因此,我想迭代存储在浏览器本地存储中的JSON对象。 基本上,JSON对象的外观和添加方式如下:Javascript迭代本地存储JSON对象(普通Javascript),javascript,json,iteration,Javascript,Json,Iteration,因此,我想迭代存储在浏览器本地存储中的JSON对象。 基本上,JSON对象的外观和添加方式如下: if (localStorage.getItem("playerHighscoreObject") == undefined) { playerHighscoreList = [ {'name': "Ben", 'score': 40}, {'name': "Joe", 'score': 44}, {'name': "Anna", 'score': 51}, {'name': "Mi
if (localStorage.getItem("playerHighscoreObject") == undefined) {
playerHighscoreList = [
{'name': "Ben", 'score': 40},
{'name': "Joe", 'score': 44},
{'name': "Anna", 'score': 51},
{'name': "Mitch", 'score': 59},
{'name': "Abdi", 'score': 63}
];
localStorage.setItem("playerHighscoreObject", JSON.stringify(playerHighscoreList));
}
else {
playerHighscoreList = localStorage.getItem("playerHighscoreObject");
}
然后我想迭代对象,检查“score”键,并将值与潜在的新条目进行比较
function saveScore() {
var key = "score";
console.log(playerHighscoreList);
for (key in playerHighscoreList) {
if (playerHighscoreList.hasOwnProperty(key)) {
var val = playerHighscoreList[key];
console.log(val);
}
}
}
然而,当我这样做时,我在日志中得到135个未定义的值。即使我打印了JSON对象,它也会按原样显示
[{"name":"Ben","score":40},{"name":"Joe","score":44},{"name":"Anna","score":51},{"name":"Mitch","score":59},{"name":"Abdi","score":63}]
我做错了什么
编辑:
建议重复使用jQuery来解决问题。我不希望使用jQuery,但希望使用标题中描述的普通javascript。一旦您解决了发现和解决的问题 (更多信息请参见下文。) …那么在其核心,这与本地存储或JSON无关。您希望在对象数组中循环并访问数组中对象的属性 代码的问题是
for in
,它不用于在数组中循环;有一套完整的循环数组的方法键的值
键
执行双重任务forEach
:
function saveScore() {
var key = "score";
playerHighscoreList.forEach(function(entry) {
if (entry.hasOwnProperty(key)) {
var val = entry[key];
console.log(val);
}
});
}
关于从本地存储中检索对象,您可以简化:
playerHighscoreList = JSON.parse(localStorage.getItem("playerHighscoreObject") || "null") || [
{'name': "Ben", 'score': 40},
{'name': "Joe", 'score': 44},
{'name': "Anna", 'score': 51},
{'name': "Mitch", 'score': 59},
{'name': "Abdi", 'score': 63}
];
一旦您更新了它,就保存它(在更新它之前没有特殊的理由保存它,就像您的原始代码那样):
您还可以考虑生成本地存储名和变量名匹配。< /P> < P>一旦找到了找到的问题和
(更多信息请参见下文。) …那么在其核心,这与本地存储或JSON无关。您希望在对象数组中循环并访问数组中对象的属性 代码的问题是for in
,它不用于在数组中循环;有一套完整的循环数组的方法键的值
键
执行双重任务forEach
:
function saveScore() {
var key = "score";
playerHighscoreList.forEach(function(entry) {
if (entry.hasOwnProperty(key)) {
var val = entry[key];
console.log(val);
}
});
}
关于从本地存储中检索对象,您可以简化:
playerHighscoreList = JSON.parse(localStorage.getItem("playerHighscoreObject") || "null") || [
{'name': "Ben", 'score': 40},
{'name': "Joe", 'score': 44},
{'name': "Anna", 'score': 51},
{'name': "Mitch", 'score': 59},
{'name': "Abdi", 'score': 63}
];
一旦您更新了它,就保存它(在更新它之前没有特殊的理由保存它,就像您的原始代码那样):
您也可以考虑使用本地存储名和变量名匹配。有没有JSON.parse?@Dimava:Oooh,我完全错过了。
stringify
在那里,但是缺少了parse
。“尽管我打印了JSON对象,它显示为它应该显示的样子”,但您获得特定输出的事实意味着playerHighscoreList
是一个字符串。记录数组/对象会产生稍微不同的输出。是否可能是.Dupe的副本?有没有JSON.parse?@Dimava:Oooh,我完全错过了。stringify
在那里,但是缺少了parse
。“尽管我打印了JSON对象,它显示为它应该显示的样子”,但您获得特定输出的事实意味着playerHighscoreList
是一个字符串。记录数组/对象会产生稍有不同的输出。可能是的重复。