2016-12-30 1 views
2

자바 스크립트에서 중첩 배열/객체의 특정 키로 검색하고 모든 상위 계층 구조를 반환해야하며 루트 부모까지 부모를 포함하고 하위 객체도 포함해야합니다. 여기 샘플 JSON입니다 :중첩 객체/배열의 특정 키로 검색 javascript

 let array = [ 
     { 
      "no": "1", 
      "name": "abc", 
      "child" : [ 
       { 
        "no": "1.1", 
        "name": "def", 
        "child" : [ 
         { 
          "no": "1.1.1", 
          "name": "Foo" 
         }, 
         { 
          "no": "1.1.2", 
          "name": "jkl" 
         } 
         ] 
       }, 
       { 
        "no": "1.2", 
        "name": "Foo", 
        "child" : [ 
         { 
          "no": "1.2.1", 
          "name": "Foo" 
         }, 
         { 
          "no": "1.2.2", 
          "name": "aaaaaaa" 
         } 
         ] 
       } 
      ] 
      }, 
     { 
      "no": "2", 
      "name": "abc2", 
      "child" : [ 
       { 
        "no": "2.1", 
        "name": "Foo", 
        "child" : [ 
         { 
          "no": "1.1.1", 
          "name": "ghi" 
         }, 
         { 
          "no": "1.1.2", 
          "name": "jkl" 
         } 
         ] 
       }, 
       { 
        "no": "2.2", 
        "name": "ghssssi", 
        "child" : [ 
         { 
          "no": "2.2.1", 
          "name": "ghssssi" 
         },  
         { 
          "no": "2.2.2", 
          "name": "asass" 
         } 
         ] 
       } 
      ] 
     } 
    ]; 

그리고 우리는 키 = '푸'로 검색하고자 할 때, 그 결과는 다음과 같이 될 것이다 :

 array_result = [ 
     { 
      "no": "1", 
      "name": "abc", 
      "child" : [ 
       { 
        "no": "1.1", 
        "name": "def", 
        "child" : [ 
         { 
          "no": "1.1.1", 
          "name": "Foo" 
         } 
         ] 
       }, 
       { 
        "no": "1.2", 
        "name": "Foo", 
        "child" : [ 
         { 
          "no": "1.2.1", 
          "name": "Foo" 
         } 
         ] 
       } 
      ] 
     }, 
     { 
      "no": "2", 
      "name": "abc2", 
      "child" : [ 
       { 
        "no": "2.1", 
        "name": "Foo", 
        "child" : [ 
         { 
          "no": "1.1.1", 
          "name": "ghi" 
         }, 
         { 
          "no": "1.1.2", 
          "name": "jkl" 
         } 
         ] 
       } 
      ] 
     } 
    ]; 

나는 그것이 재귀해야합니다 확신합니다 기능. 누구나 아이디어있어? 감사합니다.

+1

? 누군가가 문제를 지적 할 수 있도록 코드를 제시하십시오. 완전한 코드 응답을 얻을 수있는 곳이 아닙니다. – MeanGreen

+0

원본 데이터를 변경하지 않고 원본 데이터의 복사본을 가져 오시겠습니까? –

답변

0

원본 배열에서 복사본을 가져 와서 원하는 값을 갖거나 자식 값이 있으면 배열을 필터링 할 수 있습니다. 지금까지 자신을 시도 무엇

var array = [{ no: "1", name: "abc", children: [{ no: "1.1", name: "def", children: [{ no: "1.1.1", name: "Foo" }, { no: "1.1.2", name: "jkl" }] }, { no: "1.2", name: "Foo", children: [{ no: "1.2.1", name: "Foo" }, { no: "1.2.2", name: "aaaaaaa" }] }] }, { no: "2", name: "abc2", children: [{ no: "2.1", name: "Foo", children: [{ no: "1.1.1", name: "ghi" }, { no: "1.1.2", name: "jkl" }] }, { no: "2.2", name: "ghssssi", children: [{ no: "2.2.1", name: "ghssssi" }, { no: "2.2.2", name: "asass" }] }] }], 
 
    find = 'Foo', 
 
    result = JSON.parse(JSON.stringify(array)).filter(function search(a) { 
 
     var children; 
 
     if (a.name === find) { 
 
      return true; 
 
     } 
 
     if (!Array.isArray(a.children)) { 
 
      return false; 
 
     } 
 
     children = a.children.filter(search); 
 
     if (children.length) { 
 
      a.children = children; 
 
      return true; 
 
     } 
 
    }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

덕분에 @nina, 그것은 나를 많이 도왔습니다. 내 필요에 따라 코드를 수정했습니다. – ipeh