2011-09-15 16 views

回答

8

只要他們不擔心循環引用,你可以做以下

function findX(obj) { 
    var val = obj['x']; 
    if (val !== undefined) { 
    return val; 
    } 
    for (var name in obj) { 
    var result = findX(obj[name]); 
    if (result !== undefined) { 
     return result; 
    } 
    } 
    return undefined; 
} 

注意:這將搜索此對象的屬性「X」直接或它的原型鏈。如果你特別希望將搜索範圍限制到這個對象,你可以這樣做,這樣做以下

if (obj.hasOwnProperty('x')) { 
    return obj['x']; 
} 

,並重復爲遞歸調用模式findX

+1

您需要將遞歸調用的值返回給findX ... –

+0

@Mike,謝謝。固定 – JaredPar

+2

請注意,這也將搜索原型鏈。如果不需要,請在其上調用幾個['hasOwnProperty'](http://es5.github.com/#x15.2.4.5)調用。 –

3
function hasKey(obj,key){ 
    if(key in obj) 
     return true; 
    for(var i in obj) 
     if(hasKey(obj[i],key)) 
      return true; 
    return false; 
} 

例如:

alert(hasKey({a:{b:{c:{d:{e:{f:{g:{h:{i:{}}}}}}}}}},'i')); 
相關問題