2017-09-20 9 views
-2

나는이 하나 같이 JSON 파일을 가지고 :자바 스크립트하는 JSON에서 개체의 부모를 찾는

{ 
    "id": 1, 
    "name": "node", 
    "nodes": [ 
     { 
     "id": 2, 
     "name": "node", 
     "nodes": [ 
      { 
      "id": 3, 
      "name": "node", 
      "nodes": [] 
      } 
     ] 
     }, 

나는 개체의 "ID"를 통과 어디 기능을 가지고 싶습니다 나는 목록을 얻을 수 있습니다 모든 부모 노드 "id"특성. 원하는 "id"에 도달하는 한 가지 방법으로 작동하는 재귀 함수에 대해 물어 본 다음 트리를 백업하고 모든 부모에 대한 모든 "id"값을 푸시합니다 (어떻게, 잘 모름). JavaScript/Lodash에서 가능합니까?

+0

답장을 보내 주셔서 감사합니다. 나는 marvel308의 예문에 따라 Lodash를 사용하고 있습니다. https://plnkr.co/edit/Qsm4sZigqZwYW7MRNuti?p=preview – user841760

답변

1

다음과 같은 방법으로

let obj = { 
 
    "id": 1, 
 
    "name": "node", 
 
    "nodes": [ 
 
     { 
 
     "id": 2, 
 
     "name": "node", 
 
     "nodes": [ 
 
      { 
 
      "id": 3, 
 
      "name": "node", 
 
      "nodes": [] 
 
      } 
 
     ] 
 
     } 
 
    ] 
 
} 
 
//console.log(obj); 
 

 
function find(obj, id){ 
 
    if(obj.id == id){ 
 
     return [id]; 
 
    } 
 
    let result = []; 
 
    for(element of obj.nodes){ 
 
     //console.log('p', obj.id, 'c', element); 
 
     result = result.concat(find(element, id)); 
 
    } 
 
    //console.log(result); 
 
    if(result.length > 0){ 
 
     result.push(obj.id); 
 
    } 
 
    return result; 
 
} 
 

 
console.log(find(obj, 3));

+0

감사합니다. 객체 배열을 사용하려면 어떻게해야합니까? – user841760

+0

당신은 for..of 루프를 사용하여 내부 배열을 호출하는 방법을 볼 수 있습니다. 단순히 외부 함수에서 같은 방식으로 호출 할 수 있습니다. – marvel308

+0

gotcha, 도움 주셔서 감사합니다! – user841760

0

내가 원하는 "ID"에 도착하는 한 가지 방법을 작동하는 재귀 함수에 대해 부탁 해요 추측에 그렇게 할 수 있습니다 그런 다음 나무를 백업하고 모든 부모에 대한 모든 "id"값을 푸시합니다 (어떻게 알지는 못합니다)

오른쪽. 아주 복잡해, 너 생각하지 않니?

이제 모든 노드를 찾는

var data = { 
 
    "id": 1, 
 
    "name": "node", 
 
    "nodes": [{ 
 
    "id": 2, 
 
    "name": "node", 
 
    "nodes": [{ 
 
     "id": 3, 
 
     "name": "node", 
 
     "nodes": [] 
 
    }] 
 
    }] 
 
} 
 

 
var nodesById = Object.create(null); 
 
//quickly indexing the nodes, 
 
//and adding them a reference to their parentId 
 
(function _(parentId, node){ 
 
    node.parentId = parentId; 
 
    nodesById[node.id] = node; 
 
    if(node.nodes) 
 
    node.nodes.reduce(_, node.id); 
 
    
 
    return parentId; //for the reduce() 
 
})(null, data); 
 

 
function getParent(node){ 
 
    return nodesById[node.parentId]; 
 
}
그 맵에서 간단한 조회의 문제입니다 :

은 왜 그런 종류의 물건을 매트하지 않습니다.