Я хотел бы указать вам на возможность перебирать объект и рекурсивно находить имя родителя некоторого свойства. При этом ваша test
функция будет выглядеть так:
var test = function(rootobj,propname,rootObjName) {
// do smth with object AS rootobj[propname]
var objparents = findParents(rootobj,propname,rootObjName);
}
test(a,'dark','a');
Где findParents
:
function findParents(obj,key,rootName){
var parentName = rootname || '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]
+')] => '+parentName);
}
}
}
}
iterate(obj);
return result;
}
Проблема, конечно, в том, что свойство не должно быть уникальным. Как в:
var a =
{
'light': 'good',
'dark' : {
'black': 'bad',
'gray' : 'not so bad'
'yellow' : {
'dark': 'will do', //<=there's 'dark' again!
'light':'never use'
}
}
}
Ну, может быть, это пригодно для использования. Вы можете найти демонстрацию функции findParents в http://jsfiddle.net/KooiInc/Kj2b9/