JSObjectTraversal

by santon

JavaScript

var obj = {
    firstName: "John",
    lastName: "Doe",
    address1A: {
        street: "120 Washington St",
        city: "Mountain View",
        state: "CA",
        address2A: {
            street: "100 Washington st",
            city: "Mountain View",
            state: "CA",
            address3A: {
                street: "150 Washington st",
                city: "Mountain View",
                state: "CA",
                address4A: {
                    street: "150 Washington st",
                    city: "Mountain View",
                    state: "CA",
                }
            }
        }
    },
    address1B: {
        street: "120 Washington St",
        city: "Mountain View",
        state: "CA",
        address2B: {
            street: "100 Washington st",
            city: "Mountain View",
            state: "CA",
            address3B: {
                street: "150 Washington st",
                city: "Mountain View",
                state: "CA",
                address4B: {
                    street: "150 Washington st",
                    city: "Mountain View",
                    state: "CA",
                }
            }
        }
    }
};

function traverse(initObj, depth) {

    depthTraversal(initObj, depth, 1);
}

function depthTraversal(objArg, depthArg, counterArg) {
    //create a closure for remembering loop variables
    return (function (myObj, myDepth, counter) {
        //console.log(myDepth + " - " + counter);
        if (myDepth < counter) {
            return;
        }
        //console.log(myObj);
        for (var prop in myObj) {
            //console.log(prop + " :" + typeof (myObj[prop]));
            if (myObj.hasOwnProperty(prop)) {
                if (typeof (myObj[prop]) === "object") {
                    console.log(prop);
                    depthTraversal(myObj[prop], myDepth, counter + 1);
                }
            }
        }
    }(objArg, depthArg, counterArg)); //IIFE
};


traverse(obj, 4);