2012-04-17 41 views
3

假設只有父對象我有一個對象類似以下內容:的Javascript返回包含一個特殊的屬性

var Obj = { 
      a: { 
        name: 'X', 
        age: 'Y', 
        other: { 
          job: 'P', 
          location: { 
              lat: XX.XXXX, 
              lng: YY.YYYYY, 
              ......... 
             } 
          } 
       } 
      }; 

我的目標:我需要一個方法,將檢查key的存在,並返回其直接父對象用於任何級別的嵌套。

如果我搜索lat該方法將返回location對象,如果我搜索job它將返回other等。

請幫忙。 謝謝....

+0

你有什麼這麼遠嗎? (提示:嘗試使用for..in循環或jQuery的$ .each()...)的遞歸函數 – nnnnnn 2012-04-17 04:02:29

+0

這是一個二叉樹搜索 – Mohsen 2012-04-17 04:03:26

回答

3

試試這個:

function findObjectWithProperty(obj, term){ 
    if (typeof obj == 'object' 
     && Object.prototype.toString.call(obj) !== '[object Array]'){ 
     for(var prop in obj){ 
      if (obj.hasOwnProperty(prop)){ 
       if (prop==term) 
        return obj; 
       var result = findObjectWithProperty(obj[prop], term); 
       if (result != null) 
        return result; 
      } 
     } 
    } 
    return null; 
} 

用途:

var location = findObjectWithProperty(Obj, 'lat'); 
var other = findObjectWithProperty(Obj, 'job'); 
1

我不知道如何編寫一個像C#反射這樣的問題的通用函數,但這種功能可能會幫助,雖然不通用。

//Object. 
var Obj = { 
      a: { 
        name: 'X', 
        age: 'Y', 
        other: { 
          job: 'P', 
          location: { 
              lat: 31.88, 
              lng: 71.88 

             } 
          } 
       } 
      }; 


function getParentObject(key,obj){ 
    switch(key){ 
    case "lat" || "lng": return obj.a.other.location; break; 
    //write other cases... 
    default:return obj; 
    } 
} 


//Call 
var lng = getParentObject("lat",Obj).lng;