2013-11-20 13 views
7

私は、JavaScriptのデータ構造として表現したいと思う非常に複雑なワークフローを扱っています。本質的には、一連の質問と回答であり、1つの質問に対する回答が次に質問される質問に影響します。このワークフローをJavaScriptのデータ構造として表現するにはどうすればよいですか?

enter image description here

私が一緒に仕事するのは簡単ですJavaScriptオブジェクトには、この流れを変換するかどうかはわかりません:以下は、流れがどのように見えるかの基本的な例です。ループ/再帰が容易で変更が容易な構造を持つことが理想的です。あまりにも多くの変更を加えることなく、フローを後で変更したい場合、そうすることができます。

これは、ノードが複数の親を持つことができる何らかの奇妙なツリー構造だと思います。 (私はこのようなデータ構造が呼び出されているかどうかはわかりません)

{ 
    id: 5, 
    parents: [2, 3], 
    children: [6, 7, 8] 
} 

しかし、それはノードオブジェクトをループするときには本当に柔軟性がないようです(私は間違っている可能性があります)。

誰かが私が調べる必要のあるデータ構造の種類や、JavaScriptでそれらを実装する方法について、いくつかの指示やガイダンスを提供できれば、私は非常に感謝しています。

ありがとうございます。

+3

を。 – glomad

+0

ありがとう、ithcy。私はそれらの両方を調べ、報告する。 – HartleySan

+0

これは参考になるかもしれません:http://stackoverflow.com/a/6894080/2282538 – Tyler

答えて

6

あなたの最初の考えはあなたのシナリオに合っています。また、データ構造に関するご質問には、すでにJSONとお答えしています。私はそれにこだわるだろう。

あなたが質問に答えて戻る必要がない限り、私はあなたが両親を救う必要はないと思います。
この場合は、directed acyclic graphがあります。これは、シナリオに関して考えることができる唯一の構造です。
JSでこのグラフを実装し可視化するためのフレームワークがいくつかあります(this questionを参照)。

var graph = graph || {}; 

graph.nodes = [ 
    {id:1, children:[2,3]}, 
    {id:2, children:[]}, 
    {id:3, children:[4]}, 
    {id:4, children:[]} 
]; 

//Returns the next question-id for an answer-id 
//or -1 if this was the last answer 
graph.nextQForA = function(aId) { 
    for(var i = 0; i < graph.nodes.length; i++) 
    { 
    if(graph.nodes[i].id === aId && graph.nodes[i].children.length > 0) 
     return graph.nodes[i].children[0]; 
    } 

    return -1; 
} 

使い方ここに表示されているように(クロームコンソール):
enter image description here

自分でこのような構造を実現しようとしている場合は、ここであなたが始めるためにいくつかの(実際には基本的な)コードです

このトラバーサルは、繰り返しの代わりに再帰的に行うこともできます。

0

これにはChoiceScriptの使用を検討することができます。 Javascriptベースのライブラリを入手するのは非常に簡単です。独自のQ&AタイプのWebサイトを作成でき、ニーズにきわめて合っているようです。

ちょうどあなたのワークフローのように、ChoiceScriptは動的な質問と回答を可能にします。つまり、質問に答えて次の質問に影響を与えることができます。

リンク:http://www.choiceofgames.com/make-your-own-games/choicescript-intro/

ChoiceScriptは、主にゲームを作成するために使用されているが、それは、それはまた、あなたのニーズに合うように見えます。ここでは、このJavaScriptライブラリを使用して作成されたゲームの例を以下に示します。これは、有向グラフ、または有向グラフのように見える

https://www.choiceofgames.com/ninja/#utm_source=cog&utm_medium=web&utm_content=ourgames

関連する問題