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

Eae*_*Eae 0 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"] );
                }
            });
Run Code Online (Sandbox Code Playgroud)

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

提前致谢...

Dav*_*und 5

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

i = 0它是具有命名属性的对象ACHE是一个数组.

你可以这样写:

vWords.wordsacross[0].ACHE.length
Run Code Online (Sandbox Code Playgroud)

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

例如,wordsacross数组中的一个项可以具有word值所属ACHEletters属性,以及值为您的字母数组的属性.通过这种方式,您可以访问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" }
    ]}
],
Run Code Online (Sandbox Code Playgroud)

由于信件"A","C","H","E"可以从字推断"ACHE"你可以逃脱只是写:

"wordsacross": [
    { "word": "ACHE";
      "squares": ["A1", "A2", "A3", "A4"]
    }
]
Run Code Online (Sandbox Code Playgroud)

该字符串"ACHE"可以被视为一个字符数组; 你可以得到它length,你可以在任何给定的位置访问carachter , wordsacross[0].word[i].