2016-12-27 54 views
1

我一直致力于基于决策树的形式。该表格由四个问题的页面组成,并提供预先确定的答案。每个页面可以有一个问题分支出问题的一个新分支。页面的格式为div,数据属性为分支名称和页码(data-branch =“whatever”和data-page-number =“1”)。当用户回答将问题发送给一个新的分支,nextBranch变量被设置,当所有四个问题都被回答时,分支名称和页码值被添加到日志中,并调用next()方法。此方法基于nextBranch变量和日志中的最后一项(分支名称和页码)计算出下一页。基于决策树的递归递归形式

如果nextBranch不等于当前分支,则用户被带到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

我假设日志需要保留所有的页面浏览量,所以大概搜索日志是不是我们该做的。

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

+0

有时你只需要第二双眼睛。记录完美意义(在本例中)A3,B2和C2在当前分支中没有更多页面时弹出堆栈。 – Neil