【发布时间】:2018-08-21 07:44:09
【问题描述】:
我遇到以下问题: 我在 localStorage 的一个对象中有一个数组,我需要找到数组中包含的元素数。
我的代码如下
for (var i = 0; i < localPosts.length; i++){
local_tags = window.localStorage.getItem(localStorage.key(i)).tags
console.log(local_tags);
for (var f = 0; f < local_tags.length; f++) { // <--- error occurs here
tagf = local_tags[f]
console.log(tagf);
for (var j = 0; j < local_tags.length; j++) {
if(tagf == tags[j]){
print_post(i);
}
}
}
}
请原谅代码混乱
这是一个示例 myh json 文件(Json 格式(在进入循环之前已被字符串化)):
{
"article1": {
"title": "Hello World!",
"desc": "This is the first post on this website!",
"img": "",
"id": 0,
"tags": ["1", "3"]
},
"article2":{
"title": "",
"desc": "",
"img": "",
"id": 1,
"tags": ["1","2"]
}
}
这段代码的问题是,每当我尝试访问父函数时,都会收到如下错误:
Uncaught TypeError: Cannot read property 'length' of undefined
并且local_tags的日志返回
undefined
感谢您的帮助,希望我解释清楚!
编辑:使错误在代码中更加明显
EDIT2:澄清 JSON 数据是字符串化的
EDIT3:添加了整个 Json 文件
【问题讨论】:
-
for (var j = 0; j 你的标签数组在哪里?
-
window.localStorage 将 json 数据存储为 [object Object],因此您会收到该错误。
-
我在 JSON 数据进入这些循环之前对其进行字符串化@AlpeshJikadra
-
然后你需要解析它。 localStorage 只存储字符串,因此 getItem 只会返回字符串或 null。是的,您的代码稍后才会抛出,因为尝试从 String 访问未定义的属性本身并不是错误。
-
你能把传入的数据格式放在 local_tags 中吗,你可以控制台输出
标签: javascript arrays local-storage javascript-objects