2016-12-30 7 views
2

javascriptのネストされた配列/オブジェクトの特定のキーで検索し、すべての階層構造を返す必要があります。ここ は、サンプルJSONです:ネストされたオブジェクト/配列の特定のキーで検索する

 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

関連する問題