我想指出你遍歷一個對象的可能性,並遞歸地找到一些屬性的父項的名稱。有了它,你的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/
參考此問題:http://stackoverflow.com/questions/722668/traverse-all-the-nodes-of-a-json-object-tree-with-javascript。它解釋瞭如何獲取對象名稱和值。 – 2011-03-27 08:45:28