FindParent

recursively find parent(s) of a given key in a javascript object (which may contain other objects).

by KooiInc MeHere

HTML

<div id="result"></div>

JavaScript

var myobj = {
     a: 1,
     b: [1,2,3,4,5,6,7],
     c: { aa:1,
          bb:2,
          cc:3,
          testkey:'Parent should be [c]'
        },
     d: { xyz:'yeps',
          other: { another:1,
                   yetanotherotherone: { q:1,
                                         w:2,
                                         testkey:'Parent should be [yetanotherotherone]'},
                   testkey: 'Parent should be [other]',
                   end:2}
         },
     e: 15,
     f: function(){return 'bla';},
     testkey: 'Parent should be [myobj (or ROOT if not specified)]'
};

$('#result').html(findParents(myobj,'testkey','myobj').join('<br />'));

function findParents(obj,key,objrootname){
 var parentName = objrootname || 'ROOT', result = [];
 function iterate(obj, doIndent){
  var parentPrevName = '';
  for (var property in obj) {
    if (obj.hasOwnProperty(property)){
        
        if (obj[property].constructor === Object) {
           parentPrevName = parentName;
           parentName = property;
           iterate(obj[property]);
           parentName = parentPrevName;
        }
        if (key === property) {
                result.push('Found parent for key ['
                             +key+' (value = '+obj[property]
                            +')] =><b style="color:green"> '
                            +parentName +'</b>');
        }
        
    }
  }
 }
 iterate(obj); //tail optimizing
 return result;
}