【问题标题】:javascript Object property undefined, but it's therejavascript 对象属性未定义,但它在那里
【发布时间】:2017-01-05 12:02:12
【问题描述】:

我有一个如下所示的 json 文件:

 { 
   "results": {
    "name1": {
        "printouts": {
            "property1": [{
                    "someName": "someText",
                    "someName2": "someURL",
                    "someName3": integer,
                    "someName4": boolean
                }
            ],
            "property2": [
                "someText"
            ],
            "property3": [
                "someText"
            ],
            "property4": [
                "someText"
            ],
            "property5": [
                "someText"
            ],
            "property6": [
                "someText"
            ]
        },
        "someName": "someText",
        "someName2": "someURL",
        "someName3": integer,
        "someName4": boolean
    },
    "name2": {
        "printouts": {
            "property1": [{
                    "fulltext": "someText",
                    "fullurl": "someURL",
                    "namespace": integer,
                    "exists": boolean
                }
            ],
            "property2": [
                "someText"
            ],
            "property3": [
                "someText"
            ],
            "property4": [
                "someText"
            ],
            "property5": [
                "someText"
            ],
            "property6": [
                "someText"
            ]
        },
        "someName": "someText",
        "someName2": "someURL",
        "someName3": integer,
        "someName4": boolean
    },
 ......
}

我想要的是访问printouts 中每个对象的property6。 到目前为止我做了什么:

 for (i in results) {
        if (someOtherArray.length < 1) {
            someOtherArray.push(i.printouts.property6.toString());
        }

但这让我出错:无法读取未定义的属性 property6。我做错了什么?

有什么想法吗?谢谢。

【问题讨论】:

  • 可能是i.name.printouts.property6.toString()
  • results 应该是一个数组,而不是一个对象,因为它具有双重名称属性。
  • 看起来你在someText 之后还有一个额外的""property5": [someText"],
  • i 将在字符串中保存键名。您必须使用results[i] 来获取对象
  • @dnks23,但你有两个 name 里面的钥匙。

标签: javascript arrays object properties undefined


【解决方案1】:

基本上你对属性的访问权限是错误的

i.printouts.property6

它必须是一个带有property accessor 的对象,变量的括号表示法。

data.results[i].printouts.property6
//^^^^^^^^^^^^^

然后你可以遍历键并选择你想要的属性。

var data = { results: { name1: { printouts: { property1: [{ someName: "someText", someName2: "someURL", someName3: 33, someName4: false }], property2: ["someText"], property3: ["someText"], property4: ["someText"], property5: ["someText"], property6: ["someText"] }, someName: "someText", someName2: "someURL", someName3: 37, someName4: true }, name2: { printouts: { property1: [{ fulltext: "someText", fullurl: "someURL", namespace: 35, "exists": true }], property2: ["someText"], property3: ["someText"], property4: ["someText"], property5: ["someText"], property6: ["someText"] }, someName: "someText", someName2: "someURL", someName3: 34, someName4: false } } };

Object.keys(data.results).forEach(function (k) {
    console.log(data.results[k].printouts.property6);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多