2013-11-20 39 views
7

Tôi đang xử lý một luồng công việc khá phức tạp mà tôi muốn đại diện như một cấu trúc dữ liệu JavaScript. Luồng chủ yếu là một tập hợp các câu hỏi và câu trả lời trong đó câu trả lời cho một câu hỏi ảnh hưởng đến câu hỏi nào được hỏi tiếp theo. Sau đây là một ví dụ cơ bản của những gì các dòng chảy có thể trông giống như:Tôi sẽ trình bày quy trình làm việc này như một cấu trúc dữ liệu JavaScript như thế nào?

enter image description here

Tôi không chắc chắn làm thế nào để chuyển đổi dòng này thành một đối tượng JavaScript đó là dễ dàng để làm việc với. Tôi lý tưởng muốn có một cấu trúc dễ dàng lặp lại/recurse và điều đó có thể dễ dàng sửa đổi, để nếu ai đó muốn thay đổi luồng sau này, họ có thể làm như vậy mà không phải thực hiện quá nhiều thay đổi.

Tôi cảm thấy đây là một loại cấu trúc cây kỳ lạ nơi các nút có thể có nhiều hơn một phụ huynh. (Tôi không chắc cấu trúc dữ liệu như thế này được gọi là gì.)

Dù sao, ý tưởng duy nhất tôi có là gán một ID cho mỗi nút và sau đó tạo một mảng các đối tượng nút như sau:

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

Tuy nhiên, điều đó dường như không linh hoạt khi nói đến lặp qua các đối tượng nút (tôi có thể sai).

Nếu bất kỳ ai có thể vui lòng cung cấp một số hướng dẫn/hướng dẫn về loại cấu trúc dữ liệu nào tôi nên xem xét và có thể cách triển khai chúng trong JavaScript, tôi sẽ đánh giá rất cao.

Cảm ơn bạn rất nhiều trước.

+3

Điều này trông giống như một đồ thị hoặc đồ thị được hướng dẫn. – glomad

+0

Cảm ơn bạn, ithcy. Tôi sẽ xem xét cả hai và báo cáo lại. – HartleySan

+0

Điều này có thể đáng để xem xét: http://stackoverflow.com/a/6894080/2282538 – Tyler

Trả lời

6

Ý tưởng ban đầu của bạn sẽ phù hợp với kịch bản của bạn. Ngoài ra, bạn đã trả lời câu hỏi của riêng bạn về cấu trúc dữ liệu: JSON. Tôi sẽ gắn bó với nó.

Chỉ có điều tôi sẽ thay đổi: Tôi không nghĩ rằng bạn cần phải lưu cha mẹ, trừ khi bạn phải quay trở lại từ một câu trả lời cho một câu hỏi.
Nếu đây là trường hợp bạn có directed acyclic graph và đây là cấu trúc duy nhất tôi có thể nghĩ về kịch bản của bạn.
Có một vài khung công tác để thực hiện và trực quan hóa biểu đồ này trong JS, tham khảo this question.

Nếu bạn đang đi để thực hiện cấu trúc này trên của riêng bạn, đây là một số (rất cơ bản) mã để giúp bạn bắt đầu:

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; 
} 

Cách sử dụng như được hiển thị ở đây (Chrome console):
enter image description here

Việc truyền tải cũng có thể được thực hiện đệ quy thay vì lặp lại.

0

Bạn có thể cân nhắc sử dụng ChoiceScript cho việc này. Thật dễ dàng để nhận thư viện dựa trên Javascript cho phép bạn tạo trang web loại câu hỏi và trả lời của riêng mình và có vẻ như nó có thể phù hợp với nhu cầu của bạn rất độc đáo.

Cũng giống như trong quy trình làm việc của bạn, ChoiceScript cho phép câu hỏi và câu trả lời động, có nghĩa là câu trả lời cho một câu hỏi có thể ảnh hưởng đến câu hỏi tiếp theo (giống như bạn đã nêu chi tiết trong OP).

Link: http://www.choiceofgames.com/make-your-own-games/choicescript-intro/

ChoiceScript chủ yếu được sử dụng để tạo trò chơi, nhưng có vẻ như nó cũng sẽ phù hợp với nhu cầu của bạn. Dưới đây là ví dụ về trò chơi được tạo bằng cách sử dụng thư viện JavaScript này:

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

Các vấn đề liên quan