0
            {
            "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 的两次尝试都未定义。我如何访问每个方块并将其打印到控制台?

提前致谢...

4

4 回答 4

5

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,而letters属性的值将是您的字母数组。这样,您可以访问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"可以被视为一个字符数组;你可以得到它length,你可以在任何给定的位置访问carachter wordsacross[0].word[i],。

于 2013-08-19T04:29:12.273 回答
1

http://jsfiddle.net/xp8Ww/

for(var i=0;i<vWords["wordsacross"].length;i++)
            {
                var keys =Object.keys(vWords["wordsacross"][i]);
                console.log(keys.length);
                for(var j=0;j<keys.length;j++){
                    var keys2=vWords["wordsacross"][i][keys[j]].length;
                    for(var k=0;k<keys2;k++){
                      console.log(vWords["wordsacross"][i][keys[j]][k]["square"]);
                    }
                }

            }
于 2013-08-19T04:36:31.743 回答
0

尝试这个

for (key in vWords) { //Iterate for wordsacross and wordsdown
    console.log(key);
    var words = vWords[key]; //Get the value for wordsacross and wordsdown
    for (var i = 0; i < words.length; i++) { //Iterate over the words
        for (word in words[i]) { //Iterate over the word object
            console.log(word);
            var wordSquares = words[i][word]; //Get the letter and square info for word object
            for (var j = 0; j < wordSquares.length; j++) { //Iterate over the letters
                console.log(wordSquares[j].letter);
                console.log(wordSquares[j].square);
            }
        }
    }
}

这将遍历结果中的所有单词并相应地打印字母和正方形

于 2013-08-19T06:59:48.823 回答
0

仅尝试vWords.wordsacross(无括号):)

于 2013-08-19T04:27:14.927 回答