2016-06-22 13 views
0

私は短縮形オブジェクトを書くことができましたが、その後、他の配列やオブジェクトのインデントをたくさん持っていきます。これは、質問された最後のものに基づいて、多数の新しい一連の質問がある質問フォーム用です。このコードの設計方法に関する提案はありますか?このようなJavaScriptで多くの分岐配列を作成する最良の方法

+0

重要なのは、データのレイアウト方法です。すべての質問が以前の回答に基づいてユニークなものであれば、最初に提案したものを超えてあまり選択肢がありません。いくつかの質問が同じパスにつながる場合は、有向グラフなどのより複雑なデータ構造が必要になります。しかし、Stack Overflowは、データ構造をブレーンストーミングするためのものではなく、厳密に定義された問題を解決するためのものです。有向グラフとグラフの構築を見てください。 [ここにはダイアログツリーの記事があります](http://gamedev.stackexchange.com/questions/40519/how-do-dialog-trees-work)これは基本的にあなたが作っているものです。 –

答えて

1

使用ツリー構造:あなたはサブツリーを再利用する場合は

var 
n0 = {/*data*/}, 
n1 = {/*data*/}, 
... 
n3234 = {/*data*/} 
n0.children = [n1, n2, n3] 
n1.children = [n11, n12, n13] 
... 
n3234.children = [] 

は、ちょうどこのを行います。このような

n2321 = n1234, 

避けサイクル:少ないタイピングで

n2222 = n2, 
... 
n1111.children = [n1] 
+0

あなたの例について私が理解していないことは、まだ定義されていない子をリストアップすることです。 – VagueExplanation

+0

@VagueExplanationが修正されました、ごめんなさい;-) –

1

その他のソリューション:

var d = { 
'': {/*data*/}, 
'1': {/*data*/}, 
'1.1': {/*data*/}, 
.. 
'3.2.3.4': {/*data*/} 
} 
for(var k in d){//init child array 
    d[k].children = [] 
} 
for(var k in d){//build tree structure 
    if(k != ''){//skip root 
    var a = k.split('.')//hierarchy array 
    var i = a.pop()//remove my level 
    var parent = a.join('.') 
    if(parent in d){//parent exists 
     d[parent].children.push({i: +i, k: k})//to prevent holes 
    } 
    else { 
     console.log('pending subtree: ' + k) 
    } 
    } 
} 
for(var k in d){//transform child array 
    d[k].children = d[k].children 
    .sort(function(a, b){return a.i - b.i})//es6 (a, b)=>a.i-b.i 
    .map(function(x){return d[x.k]})//es6 x=>d[x.k] 
} 
//now the tree is in d[''] 
+0

ホールの予防にエラーがあります。 (未定義はオブジェクトではありません( 'd [parent] .children.push'を評価する))。何をそこに置くべきですか? – VagueExplanation

+0

@VagueExplanation子配列の初期化が追加され、結合が修正されました。テストされたコードではないので、自分で完成させる必要があります... –

関連する問題