looping through an object (tree) recursively looping through an object (tree) recursively jquery jquery

looping through an object (tree) recursively


You're looking for the for...in loop:

for (var key in foo){    if (key == "child")        // do something...} 

Be aware that for...in loops will iterate over any enumerable properties, including those that are added to the prototype of an object. To avoid acting on these properties, you can use the hasOwnProperty method to check to see if the property belongs only to that object:

for (var key in foo){    if (!foo.hasOwnProperty(key))        continue;       // skip this property    if (key == "child")        // do something...}

Performing the loop recursively can be as simple as writing a recursive function:

// This function handles arrays and objectsfunction eachRecursive(obj){    for (var k in obj)    {        if (typeof obj[k] == "object" && obj[k] !== null)            eachRecursive(obj[k]);        else            // do something...     }}


You can have a recursive function with a parse function built within it.

function parseObjectProperties (obj, parse) {  for (var k in obj) {    if (typeof obj[k] === 'object' && obj[k] !== null) {      parseObjectProperties(obj[k], parse)    } else if (obj.hasOwnProperty(k)) {      parse(k, obj[k])    }  }}

I use the foo object of the OP, here how it works

var foo = {  bar:'a',  child:{    b: 'b',    grand:{      greatgrand: {        c:'c'      }    }  }}// use this recursive function with a parse funcitonfunction parseObjectProperties (obj, parse) {  for (var k in obj) {    if (typeof obj[k] === 'object' && obj[k] !== null) {      parseObjectProperties(obj[k], parse)    } else if (obj.hasOwnProperty(k)) {      parse(k, obj[k])    }  }}//***// then apply to the property the task you want, in this case just consoleparseObjectProperties(foo, function(k, prop) {  console.log(k + ': ' + prop)})