2017-02-23 15 views
0
var sample = [{ 
     "_id": "1", 
     "category": "type1", 
     "path": "data1//data2//data3//data4", 
     "org": "001" 
    }, 
    { 
     "_id": "2", 
     "category": "type2", 
     "path": "data1//data2//data3//data4", 
     "org": "002" 
    } 
]; 

上記のサンプルデータは、階層構造に変換する必要があります。階層構造に変換

var sample = { 
    children: [{ 
      name: "type1", 
      children: [{ 
       name: "data1", 
       children: [{ 
        name: "data2", 
        children: [{ 
         name: "data3", 
         children: [{ 
          name: "data4" 
         }] 
        }] 
       }] 
      }] 
     }, 
     { 
      name: "type2", 
      children: [{ 
       name: "data1", 
       children: [{ 
        name: "data2", 
        children: [{ 
         name: "data3" 
        }] 
       }] 
      }] 
     } 

    ] 
}; 

予想される出力:

+type1 
    data1 
    data2 
     data3 
     data4 
+2

あなたは何を試してみましたか?私たちがあなたを助ける前に、うまくいかなかったコードを提供する必要があります。あなたが何かを試していない場合は、ループとオブジェクトの作成に関するいくつかの調査を行い、特定の質問があるときに戻ってきます。 – scrappedcola

+0

フラットデータを階層構造に変換する方法をお手伝いください。 – srinivas

+1

_StackOverflow_へようこそ!ここで、そうする前に[How to Ask](http://stackoverflow.com/help/how-to-ask)を正しく学ぶことができます。質問をするときは、[topic](http://stackoverflow.com/help/on-topic)であることを確認して、[最小、完全、および検証可能な例](http:// stackoverflow。 com/help/mcve)を使用してください。これまでに何を試しましたか? – lealceldeiro

答えて

0

あなたは、カテゴリやパスの値を経由してアクセスの可能性を入れ子構造のサブレベルを割り当てるためのハッシュテーブルと階層構造を使用することができます。

基本的に、この提案はキーをチェックし、オブジェクトになければ、単一のプロパティと子の配列を持つ新しいオブジェクトが作成されます。また、新しいオブジェクトは親アンダースコア配列にパースされます。以前作成した配列の配列と同じ参照。

実際のレベルが返されます。最後にオブジェクトがlanst値で作成され、配列にプッシュされます。

var sample = [{ _id: "1", category: "type1", path: "data1//data2//data3//data4", org: "001" }, { _id: "2", category: "type2", path: "data1//data2//data3//data4", org: "002" }], 
 
    result = { children: [] }; 
 

 
sample.forEach(function (a, i) { 
 
    var keys = [a.category].concat(a.path.split('//')), 
 
     last = keys.pop(); 
 

 
    keys.reduce(function (r, k) { 
 
     if (!r[k]) { 
 
      r[k] = { _: [] }; 
 
      r._.push({ name: k, children: r[k]._ }); 
 
     } 
 
     return r[k]; 
 
    }, this)._.push({ name: last }); 
 
}, { _: result.children }); 
 

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

関連する問題