2014-09-05 74 views
0

我有一個JavaScript對象。我怎樣才能進入它的路徑?如何獲取JavaScript對象節點路徑

var obj = { 
    objData: { 
    Name: "", 
    age: "", 
    Department: { 
     DepartmentDetails: { 
     clerk: "xyz", 
     manager: "abc" 
     } 
    }, 
    WorkingDetails: [ 
     { 
     Title: "", 
     workType: "", 
     Appointee: { 
      BasicDetails: { 
      lastName: "", 
      middleName: "", 
      firstName: "" 
      } 
     } 
     } 
    ] 
    } 
} 

我試過下面的代碼。但它並沒有給我正確的結果。

var x = objData.Department.DepartmentDetails.clerk; 
var path = "data"; 
function search(path, obj, target) { 
    var found = false; 
    for (var k in obj) { 
     if (obj.hasOwnProperty(k)) 
      if (obj[k] === target) 
       return path + "['" + k + "']" 
      else if (typeof obj[k] === "object") { 
       var result = search(path + "['" + k + "']", obj[k], target); 
       if (result) 
        return result; 
      } 
    } 
    return false; 
} 

var path = search(path, obj, x); 
console.log(path); 

我期待的結果

Department.DepartmentDetails.clerk:xyz

任何幫助就這將是很有益的。

+0

在你的代碼是什麼'x','objData','eApp'和'key'?根據你的例子 – 2014-09-05 04:48:39

回答

1
var obj = { 
    objData: { 
     Name: "", 
     age: "", 
     Department: { 
      DepartmentDetails: { 
       clerk: "xyz", 
       manager: "abc" 
      } 
     }, 
     WorkingDetails: [{ 
      Title: "", 
      workType: "", 
      Appointee: { 
       BasicDetails: { 
        lastName: "", 
        middleName: "", 
        firstName: "" 
       } 
      } 
     }] 
    } 
} 

    function search(obj, target) { 
     var path = ""; 
     for (var key in obj) { 
      if (obj[key] == target) { 
       path += key + ":" + target; 
       return path; 
      } else { 
       path = search(obj[key], target); 
       if (path) { 
        return key+"."+path; 
       } 
      } 
     } 
    } 

alert(search(obj.objData, "xyz")) 

小提琴http://jsfiddle.net/vikrant47/8fk6h48c/

+0

即時看起來類似的輸出[http:// jsfiddle。 net/user87267867/367b45j7/1]。但是這個數組只包含key。如何給它附加值 – user87267867 2014-09-05 07:50:49

+0

http://jsfiddle.net/vikrant47/367b45j7/3/我已經更新了你的小提琴是這個你想要的? – 2014-09-05 08:32:52

1

這裏的部分問題是,有一些缺失的變量導致了邏輯問題。我圍繞邏輯工作了一下,並提出了一些我認爲你所要求的東西,只要我正確地理解了這個問題。

物體看起來是這樣的:

var obj = { 
    objData: { 
    Name: "", 
    age: "", 
    Department: { 
     DepartmentDetails: { 
     clerk: "xyz", 
     manager: "abc" 
     } 
    }, 
    WorkingDetails: [ 
     { 
     Title: "", 
     workType: "", 
     Appointee: { 
      BasicDetails: { 
      lastName: "", 
      middleName: "", 
      firstName: "" 
      } 
     } 
     } 
    ] 
    } 
}; 

而且新功能看起來像:

var path = "Department"; 
function search(path, obj, target) { 
    var found = false; 
    for (var k in obj) { 
     if (obj.hasOwnProperty(k)) 
      if (obj[k] === target) 
       return path + "." + k + ":" + target; 
      else if (typeof obj[k] === "object") { 
       var result = search(path + "." + k, obj[k], target); 
       if (result) 
        return result; 
      } 
    } 
    return false; 
} 

,那麼你會調用該函數像這樣的東西:

var path = search(path, obj.objData.Department, 'xyz'); 

我還創建了一個帶有工作演示的JSFiddle

希望有幫助!

+0

,我需要傳遞鍵的值來運行。意味着我的輸入將是bj.objData.Department.DepartmentDetails.clerk和Im期望的結果作爲JSON節點路徑:值(obj.objData.Department.DepartmentDetails.clerk:xyz – user87267867 2014-09-05 07:27:48

+0

如果你看看這行說'if( obj [k] === target)返回路徑+「。」+ k +「:」+ target;'你可以看到目標被追加到返回的路徑中 – jasonmerino 2014-09-05 14:47:01