2017-02-23 5 views
0

文字列からネストされたオブジェクトツリーを生成するためのヘルプを探しています。実施例1JavaScript内の文字列からツリーを生成する方法

A > B > C 

オブジェクトをもたらすはずである

{ 
name: A, 
children: [{ 
    name: B, 
    children: [{ 
    name: C 
    }], 
}] 
} 

例2

A > B > C | A > D > E 

オブジェクトにおける結果:

私はこれまで持っている
{ 
name: A, 
children: [{ 
    name: B, 
    children: [{ 
    name: C 
    },{ 
    name: D, 
    children: [{ 
    name: E 
    }], 
    }], 
}] 
} 

問題がある、私は適切にネストを解決する方法がわからないです。

let categoryTree = { 
    categories: [{}] 
} 

const split = (string, seperator = '|', splitter = ' > ') => { 
    if (!string.includes(seperator)) { 
    let results = string.split(splitter) 

    for (let i = 0; i < results.length; i++) { 
     let lastNode = 0 
     if (i != 0) { 
     lastNode = i - 1 
     } 
     makeTree(results[i], results[lastNode], i) 
    } 

    } 
    console.log(categoryTree) 
    return categoryTree 
} 

const makeTree = (item, parent, i) => { 
    if (categoryTree.categories[parent].name === item && categoryTree.categories[parent].name) { 
    console.log('IN') 
    categoryTree.categories[parent].categories.push({ 
     name: item, 
     categories: [{}] 
    }) 
    } else { 
    categoryTree.categories.push({name: item, categories: []}) 
    } 
} 
+0

これを行うには、コードを求めていますか? –

+3

あなたはこれまで何をしていますか? –

+0

あなたの問題を解決するためにあなたのコードを見てください。 –

答えて

3

あなたがアイテムを基準としてオブジェクトを反復して再帰的なアプローチを使用することができます。

var result = [], 
 
    string = 'A > B > C | A > D > E'; 
 

 
string.split(' | ').forEach(function (a) { 
 
    var keys = a.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 }); 
 

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

関連する問題