2017-11-24 13 views
-3

特定の親ノードの下のリストから子要素を抽出したいと思います。 これらの要素は昇順になります。再帰的にjavascript配列内の子要素を見つける

arr = [ 
    '1', 
    '1.1', 
    '2', 
    '2.1', 
    '2.2', 
    '2.3', 
    '2.4', 
    '3', 
    '3.1', 
    '3.2', 
    '3.2.1', 
    '3.2.2', 
    '3.3', 
    '3.4', 
    '3.5', 
    '3.6', 
    '3.7', 
    '3.7.1', 
    '3.7.2' 
]; 

各要素にこの形式のものが必要です。

parsed = [ 
    {id: '3', childrens:[ 
     {id:'3.1', childrens: [] }, 
     {id:'3.2', childrens: [ 
      {id:'3.2.1', childrens: [] }, 
      {id:'3.2.2', childrens: [] } 
     ] }, 
     {id:'3.3', childrens: [] }, 
     {id:'3.4', childrens: [] }, 
     {id:'3.5', childrens: [] }, 
     {id:'3.6', childrens: [] }, 
     {id:'3.7', childrens: [ 
      {id:'3.7.1', childrens: [] }, 
      {id:'3.7.2', childrens: [] } 
     ] } 
    ]} 
]; 

この解析されたJSONをツリーグリッドに渡したいとします。 は、私はあなたがドットで分割され、与えられた文字列を、取ると同じレベルのグループを維持し、ネストされたハッシュテーブルに値にパスを取ることができること

function getChilds (str){ 

    if(arr[arr.length - 1]+'.' === str) 
     return; 

    var childs = []; 

    var task = new Object(); 

    for(var i = 0 ; i < arr.length ; i++){ 
     if(arr[i].localeCompare(str) > 0){ 
      task.id=arr[i]; 
      childs.push(task); 
      tasks.push(task); 
      console.log(tasks); 
     } 
    } 
}; 
+0

注文したデータですか?何か試しましたか? –

+1

何を試しましたか?これまで持っていたコードを貼り付けてください – ztadic91

+2

これまでに何を試しましたか?スタックオーバーフローのポイントは、他の人があなたのためにすべてを行うことではありません。 – MichaelPlante

答えて

0

ための関数を記述しようとしました。

新しいレベルが見つかると、新しいオブジェクトが作成され、ハッシュテーブルに挿入されます。

結果として、すべての子配列を持つ入れ子オブジェクトを持つ配列が得られます。

結果セットの順序は、指定されたデータの順序の影響を受けます。

var data = ['1', '1.1', '2', '2.1', '2.2', '2.3', '2.4', '3', '3.1', '3.2', '3.2.1', '3.2.2', '3.3', '3.4', '3.5', '3.6', '3.7', '3.7.1', '3.7.2'], 
 
    result = function (array) { 
 
     var result = [], 
 
      hash = { _: result }; 
 

 
     array.forEach(function (a) { 
 
      a.split('.').reduce(function (r, k) { 
 
       if (!r[k]) { 
 
        r[k] = { _: [] }; 
 
        r._.push({ id: a, children: r[k]._ }); 
 
       } 
 
       return r[k]; 
 
      }, hash); 
 
     }); 
 
     return result; 
 
    }(data); 
 

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

関連する問題