【问题标题】:How to access the length of an array within an object within LocalStorage如何访问 LocalStorage 中对象内的数组长度
【发布时间】: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


【解决方案1】:

你的代码有一些错误,在if(tagf == tags[j]){

尝试以下代码,根据您的要求进行一些更改

window.localStorage.setItem("test_article1",JSON.stringify({"article1": { "title": "Hello World!", "desc": "This is the first post on this website!", "img": "", "id": 0, "tags": ["1", "3"]}}))
localPosts = ["test_article1"];
for (var i = 0; i < localPosts.length; i++){
        local_tags = JSON.parse(window.localStorage.getItem(localStorage.key(i)))["article1"]["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++) {
                    console.log(local_tags[j]);
            }
        }
    }

【讨论】:

  • 这段代码给了我第 4 行的错误 SyntaxError: Unexpected token o in JSON at position 1
  • 我在Chrome上测试了这段代码,你用的是哪个浏览器?
【解决方案2】:

我认为问题是由标签数组造成的

for (var j = 0; j < tags.length; j++) {
   if(tagf == tags[j]){
      print_post(i);
   }
}

没有定义tags.length

【讨论】:

  • 是的,这是一个错误,但是 Console.log(local_tags);并且随后的 for 循环是发生错误的地方。我将编辑帖子以使其更清晰
猜你喜欢
  • 2021-08-25
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2022-01-24
  • 2013-12-19
  • 2019-05-19
  • 2018-09-28
相关资源
最近更新 更多