【问题标题】:Looping through an object not giving me other languages循环一个对象不给我其他语言
【发布时间】:2017-05-26 00:40:07
【问题描述】:

下面有三个 JSON 语句,我已将它们转换为 JavaScript 对象。我想为这些语句中的每一个打印出演员、动词和宾语。我遇到了 object.definition.name 的问题,因为有时它会以其他语言出现。由于这一点以及我现在对其进行编码的方式,它给了我第二条语句的“未定义”,因为第二条语句是 fr-FR 而不是 en-US。如何修改循环的对象部分,以便无论它是什么语言,它都会给我一个对象?

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Get Statements 1 demo</title>
        <script src="xapiwrapper.min.js"></script>
    </head>
    <body>
        <p id='demo'></p>
        <script>

            var obj1 =
            {
    "statements": [{
            "verb": {
                "id": "http://adlnet.gov/expapi/verbs/initialized",
                "display": {
                    "en-US": "initialized"
                }
            },
            "version": "1.0.0",
            "timestamp": "2017-05-25T13:01:49.439248+00:00",
            "object": {
                "definition": {
                    "extensions": {
                        "http://example.com": 12
                    },
                    "name": {
                        "en-US": "Change management app"
                    }
                },
                "id": "https://www.avimegiddo.com/wp-admin/admin-ajax.php?action=h5p_embed&id=12",
                "objectType": "Activity"
            },
            "actor": {
                "mbox": "mailto:john.doe@abc.com",
                "name": "John Doe",
                "objectType": "Agent"
            },
            "stored": "2017-05-25T13:01:49.439248+00:00",
            "authority": {
                "mbox": "mailto:tom.creighton.ctr@adlnet.gov",
                "name": "tom",
                "objectType": "Agent"
            },
            "id": "2b03bcd0-11bd-4b43-a256-7e7c8cb259fc"
        },

        {
            "verb": {
                "id": "http://adlnet.gov/expapi/verbs/attempted",
                "display": {
                    "en-US": "attempted"
                }
            },
            "version": "1.0.0",
            "timestamp": "2017-05-25T12:54:52.184309+00:00",
            "object": {
                "definition": {
                    "extensions": {
                        "http://h5p.org/x-api/h5p-local-content-id": 12
                    },
                    "name": {
                        "fr-FR": "le livre"
                    }
                },
                "id": "https://www.avimegiddo.com/wp-admin/admin-ajax.php?action=h5p_embed&id=12",
                "objectType": "Activity"
            },
            "actor": {
                "mbox": "mailto:sally.smith@abc.com",
                "name": "Sally Smith",
                "objectType": "Agent"
            },
            "stored": "2017-05-25T12:54:52.184309+00:00",
            "authority": {
                "mbox": "mailto:megiddo@gmail.com",
                "name": "avimegiddo",
                "objectType": "Agent"
            },
            "context": {
                "contextActivities": {
                    "category": [{
                        "id": "http://h5p.org/libraries/H5P.DragText-1.5",
                        "objectType": "Activity"
                    }],
                    "grouping": [{
                        "definition": {
                            "moreInfo": "https://www.avimegiddo.com/business-emails/",
                            "type": "http://activitystrea.ms/schema/1.0/page",
                            "name": {
                                "en": "How to write business emails: be formal and polite. ESL / EFL Practice Quizzes."
                            }
                        },
                        "id": "https://www.avimegiddo.com/business-emails/"
                    }]
                }
            },
            "id": "83105145-a27c-4bec-bbb0-c1c9f9775930"
        },

        {
            "verb": {
                "id": "http://adlnet.gov/expapi/verbs/attempted",
                "display": {
                    "en-US": "attempted"
                }
            },
            "version": "1.0.0",
            "timestamp": "2017-05-25T13:51:45.976631+00:00",
            "object": {
                "definition": {
                    "extensions": {
                        "http://h5p.org/x-api/h5p-local-content-id": 5,
                        "http://h5p.org/x-api/h5p-subContentId": "bb5c8621-1bcf-4cc7-b1b0-8af2950bffcd"
                    },
                    "name": {
                        "en-US": "Drag the words into the correct boxes\n"
                    }
                },
                "id": "https://www.avimegiddo.com/wp-admin/admin-ajax.php?action=h5p_embed&id=5?subContentId=bb5c8621-1bcf-4cc7-b1b0-8af2950bffcd",
                "objectType": "Activity"
            },
            "actor": {
                "mbox": "mailto:terry.phillips@abc.com",
                "name": "Terry Phillips",
                "objectType": "Agent"
            },
            "stored": "2017-05-25T13:51:45.976631+00:00",
            "authority": {
                "mbox": "mailto:megiddo@gmail.com",
                "name": "avimegiddo",
                "objectType": "Agent"
            },
            "context": {
                "extensions": {
                    "http://id.tincanapi.com/extension/ending-point": 1
                },
                "contextActivities": {
                    "category": [{
                        "id": "http://h5p.org/libraries/H5P.DragText-1.5",
                        "objectType": "Activity"
                    }],
                    "parent": [{
                        "id": "https://www.avimegiddo.com/wp-admin/admin-ajax.php?action=h5p_embed&id=5",
                        "objectType": "Activity"
                    }],
                    "grouping": [{
                        "definition": {
                            "moreInfo": "https://www.avimegiddo.com/2017/04/21/business-emails-short-quizzes/",
                            "type": "http://activitystrea.ms/schema/1.0/page",
                            "name": {
                                "en": "Projects ~ Avi Megiddo"
                            }
                        },
                        "id": "https://www.avimegiddo.com/2017/04/21/business-emails-short-quizzes/"
                    }]
                }
            },
            "id": "7b0582d3-c22d-4818-937e-cc0e5ffbbf18"
        }
    ]
}

            var actorVerbObject = "";
            for (i=0; i<3; i++){
                actorVerbObject += obj1.statements[i].actor.name + ", " + obj1.statements[i].verb.display['en-US'] + ", " + obj1.statements[i].object.definition.name['en-US'] + "<br />";
            }
            document.getElementById('demo').innerHTML = actorVerbObject;

        </script>
    </body>
</html>

【问题讨论】:

标签: javascript


【解决方案1】:

使用Object.keys查看fiddle

var actorVerbObject = "";
for (i = 0; i < 3; i++) {
    var displayLangs = Object.keys(obj1.statements[i].verb.display);
    var definitionLangs = Object.keys(obj1.statements[i].object.definition.name);
    actorVerbObject += obj1.statements[i].actor.name + ", " + obj1.statements[i].verb.display[displayLangs[0]] + ", " + obj1.statements[i].object.definition.name[definitionLangs[0]] + "<br />";
}

【讨论】:

  • 这不仅仅是英语或法语。也可以是其他语言。谢谢。
  • 已更新答案,立即尝试。
  • 谢谢,但您的答案现在缺少动词。
  • 没有汗水。 Object.keys 返回对象中的键数组。答案假设verb.display 对象中只存在一个键。如果还有更多,您可以遍历每个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多