Frnak
Frnak

Reputation: 6812

Get path of element in object without looping through all elements (second hierachy level unkown)

I have the following object:

var oBadge = {
    COMMENT_CREATED: {  
        FIRST_COMMENT_CREATED: {
            code: "FIRST_COMMENT_CREATED", 
            src: "",
            name: "Socializer",
            text: "Create a comment for an idea",
            condition: {
                today: null,
                over_all: 1
            }
        }
    }
};

i need to check if a string i get (for example "FIRST_COMMENT_CREATED") is contained in the oBadge model. The object contains more elements - not only the comment_created element. Therefore i cannot define to check it there.

I found the following function to determine wether the element is contained within the object or not, but I also need the contained data, not only the statement whether it is contained or not.

oBadge.hasOwnProperty("FIRST_COMMENT_CREATED")

What i'm basically looking for is a way to skip the second hierachy level on my check - like:

if(oBadge.[<all>]["FIRST_COMMENT_CREATED"] !== undefined) {
    // return data
}

Upvotes: 0

Views: 47

Answers (2)

Gaurang Tandon
Gaurang Tandon

Reputation: 6781

Use a function and a loop (for-in):

function find(key, obj){
    if(!obj.hasOwnProperty) return false; // no primitive data please!

    if(obj.hasOwnProperty(key))
        return obj[key];
    else return false;
}

for(var key in oBadge){
    if(find("FIRST_COMMENT_CREATED", key))
        // code
}

Upvotes: 0

taxicala
taxicala

Reputation: 21789

There is no way to skip the hierarchy without looping through the object, you should use the for...in loop:

for (var prop in oBadge) {
    if(oBadge[prop].hasOwnProperty("FIRST_COMMENT_CREATED"))    {
        // return data
    }
}

Upvotes: 2

Related Questions