javascript - 在 JavaScript 中获取嵌套 JSON 数组的长度

标签 javascript arrays json

            {
            "wordsacross": [
                {"ACHE": [
                    { "letter":"A" , "square":"A1" }, 
                    { "letter":"C" , "square":"A2" }, 
                    { "letter":"H" , "square":"A3" },
                    { "letter":"E" , "square":"A4" }
                ]},
                {"OPT": [
                    { "letter":"O" , "square":"A6" }, 
                    { "letter":"P" , "square":"A7" }, 
                    { "letter":"T" , "square":"A8" }
                ]}
            ],
            "wordsdown": [
                {"ALPHA": [
                    { "letter":"A" , "square":"A1" }, 
                    { "letter":"L" , "square":"B1" }, 
                    { "letter":"P" , "square":"C1" },
                    { "letter":"H" , "square":"D1" },
                    { "letter":"A" , "square":"E1" }
                ]},
                {"BRO": [
                    { "letter":"B" , "square":"G1" }, 
                    { "letter":"R" , "square":"H1" }, 
                    { "letter":"O" , "square":"I1" }
                ]}
            ]
            }

            $.ajax({
                type: "POST",
                url: "query.words.php",
                data: { puzzleid: vPuzzleId },
                async: false
            }).done(function( msg ) {
                vWords = JSON.parse( msg );
                console.log(vWords);
                console.log("There are "+vWords["wordsacross"].length+" words across");
                for(var i=0;i<vWords["wordsacross"].length;i++)
                {
                    console.log( vWords["wordsacross"][i].length );
                    console.log( vWords["wordsacross"][i][0]["square"] );
                }
            });

我正在尝试将所有方形项目的内容打印到控制台。我对 console.log 的两次尝试都未定义。我如何访问每个方 block 并将其打印到控制台?

提前致谢...

最佳答案

vWords['wordsacross']vWords.wordsacross(等效项)包含一个包含两个元素的数组。当您编写 vWords['wordsacross'][i] 时,您正在访问其中一项。然后,您尝试访问该单个项目的 length[0],但该项目不是数组,而是一个对象。

对于i = 0,它是一个具有名为ACHE的属性的对象,并且是一个数组。

你可以这样写:

vWords.wordsacross[0].ACHE.length

根据对象的结构方式,包含字母数组的属性对于数组中的每一项都是不同的,这可能有点不方便。您可以使用 Object.keys(vWords.wordsacross[i]) 枚举对象自己的属性,但我建议您更改对象(如果可以的话)。

例如,wordsacross 数组中的一项可能有一个 word 属性,其值为 ACHE 和一个 letter 属性,其值将是您的字母数组。这样,您就可以访问 vWords.wordsacross[i].letters,而不必知道该单词恰好是 “ACHE”:

"wordsacross": [
    {"word": "ACHE",
     "letters": [
        { "letter":"A" , "square":"A1" }, 
        { "letter":"C" , "square":"A2" }, 
        { "letter":"H" , "square":"A3" },
        { "letter":"E" , "square":"A4" }
    ]}
],

由于字母 "A""C""H""E" 可以从单词“ACHE”推断出,您可能只需写下即可逃脱:

"wordsacross": [
    { "word": "ACHE";
      "squares": ["A1", "A2", "A3", "A4"]
    }
]

字符串"ACHE"可以被视为字符数组;您可以获取它的长度,并且可以在任何给定位置访问该字符,wordsacross[0].word[i]

关于javascript - 在 JavaScript 中获取嵌套 JSON 数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306353/

相关文章:

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

javascript - JS : why do i need brackets to call a method on number?

javascript - 如何同时合并和平展数组

数组中的javascript数组

.net - ASP.NET MVC 如何生成 JsonResults?

python - 在 Python 中遍历 JSON 列表时出现问题?

json - 为什么 StaticFileHandler 不是服务器 .json?

javascript - Dojo表单获取值

javascript - 滚动时更改 bootstrap 3 导航栏的颜色

python - 将二维数组附加到一个数组