我一直在研究基于决策树的表单。该表格由四个问题组成,每个问题都有预定的答案。每个页面可以有一个问题,可以分支到新的问题分支。页面采用div的形式,具有分支名称和页码的数据属性(data-branch =“ whatever”和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-在此页面递增,而实际上应返回A4则返回C3 ...
我正在努力用当前的设置方法来找到解决方案,所以我希望有任何建议!!
这是我目前拥有的东西-https://jsfiddle.net/yphyk3sq/
最佳答案
我认为日志需要保留所有页面视图,因此搜索日志可能不是要做的事情。
相反,您可以专门为此反向搜索创建堆栈。每当分支ID更改时,就将旧ID推入堆栈。当C页用完时,您查看堆栈并看到B是前一个,因此弹出B并继续下一个B页。当您用完B页时,堆栈的顶部将是A,您将按预期进行移动。