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;
}