dnks23
dnks23

Reputation: 369

javascript Object property undefined, but it's there

i have a json-file looking like this:

 { 
   "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
    },
 ......
}

What i want is to access property6 of each object in printouts. What i've done so far:

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

But this gets me Error: Cannot read property property6 of undefined. What am i doing wrong?

Any Idea? Thanks.

Upvotes: 0

Views: 5600

Answers (1)

Nina Scholz
Nina Scholz

Reputation: 386883

Basically you have the wrong access to the property with

i.printouts.property6

it needs to be an object with a property accessor with bracket notation for a variable.

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

Then you could iterate over the keys and select the property you want.

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);
});

Upvotes: 2

Related Questions