基于决策树的表单

时间:2016-12-27 19:19:22

标签: javascript recursion

我一直致力于基于决策树的表单。该表格由四个问题的页面组成,并有预定的答案选择。每个页面都可以有一个问题分支到一个新的问题分支。页面采用div的形式,其中包含分支名称和页码的数据属性(数据分支="无论"以及data-page-number =" 1")当用户回答将问题发送到新分支的问题时,会设置nextBranch变量,当回答完所有四个问题后,将分支名称和页码值添加到日志中并调用next()方法。此方法根据nextBranch变量和日志中的最后一个条目(分支名称和页码)计算出下一页。

如果nextBranch不等于currentBranch,则用户将被带到nextBranch的第一页,但如果nextBranch等于currentBranch,则pageNumber会递增,并且用户将被带到当前分支的下一页。如果没有找到结果,我调用一个循环遍历页面日志的方法,直到迭代中的分支值与currentBranch值不同。当这些值不匹配时,我会从当前迭代中增加pageNumber并查找该页面。

这种方法在我刚刚分支原始分支时工作正常,但是当我分支一个分支时,反向循环遍历日志不再有效。

假设我有下面的树结构,我从A1开始并回答引导我到C2的问题,我的日志将如下所示:

[{'A': '1'},{'A': '2'},{'A': '3'},{'B': '1'},{'B': '2'},{'C': '1'},{'C': '2'}]

当达到C2时,由于没有C3,我循环遍历日志,我到达的第一个项目的分支名称不等于最后一个条目是B2,所以增加页码返回B3,这是有效的。现在日志看起来像这样

[{'A': '1'},{'A': '2'},{'A': '3'},{'B': '1'},{'B': '2'},{'C': '1'},{'C': '2'},{'B: '3'}]

完成B3后,我再次循环反向登录,我到达的第一个项目的分支名称不等于最后一个条目是C2 - 这里增加页面返回C3,它应该实际返回A4 ...

我正在努力寻找一种解决方案,以现有方式设置,所以我会喜欢任何建议!!

这是我目前所拥有的一个小提琴 - https://jsfiddle.net/yphyk3sq/

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为日志需要保留所有页面视图,因此可能无法搜索日志。

相反,您可以专门为此反向搜索创建一个堆栈。只要分支ID发生更改,就会将旧ID推送到堆栈中。当你用完C页面时,你会看到堆栈并看到B是前一个,所以你弹出B并继续下一个B页面。当你用完B页时,堆栈顶部将是A,你按照预期移动。

相关问题