EM8H
EM8H

Reputation: 13

How to operate object structure in JavaScript

var obj = {
   skill:{
      eat:true,
      walk:true
   },
   address:{
      home:"where",
      company:"where"
   }
};

I can get one item by:

tester.activate(obj[skill]);

How can I get all the items?

Upvotes: 1

Views: 1860

Answers (2)

Pointy
Pointy

Reputation: 414086

You can iterate through the properties of an object with for ... in:

for (var k in obj) {
  if (obj.hasOwnProperty(k)) {
    var value = obj[k];
    alert("property name is " + k + " value is " + value);
  }
}

The call to the "hasOwnProperty" function is there to keep this code from iterating through properties present on "obj" that are actually inherited from the Object prototype. Sometimes you might want to include those, but in this case it's safe to filter them out (I think). (And @sdleihssirhc points out that if you want to be really sure, you can use Object.prototype.hasOwnProperty.call(obj, k) )

Upvotes: 5

Raynos
Raynos

Reputation: 169551

If you need the skill you can get

obj.skill

If you need the address you can get

obj.address

or if you wanted to get the individual data:

var eat = obj.skill.eat;
var company = obj.address.company;

If you want all the items you can iterate over the structure and push all the items to an array

function pushObjToArray(obj, array) {
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
             if (obj[key] instanceof Array) {
                  pushObjToArray(obj[key], array);
             } else if (obj[key] instanceof Object) {
                  pushObjToArray(obj[key], array);
             } else {
                  array.push(obj[key]);
             }
        }
    }
    return array;
}

var array = [];
pushObjToArray(array, obj);

On second thought destroying the keys and pushing all data to an array is pretty useless.

What do you actaully want to do?

You might be looking for something like _.flatten

Upvotes: 1

Related Questions