【问题标题】:Recursion for Decision Tree based form基于决策树的形式的递归
【发布时间】:2016-12-27 19:19:21
【问题描述】:

我一直在研究基于决策树的表单。该表格由四个问题的页面组成,并带有预定的回答选项。每个页面可以有一个问题,该问题分支到一个新的问题分支。页面采用 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 - 在此处增加页面返回 C3,而它实际上应该返回 A4...

我正在努力寻找当前设置方式的解决方案,所以我希望有任何建议!

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

【问题讨论】:

    标签: javascript recursion


    【解决方案1】:

    我认为日志需要保留所有页面浏览量,因此可能不需要搜索日志。

    相反,您可以专门为此反向搜索创建一个堆栈。每当分支 ID 更改时,您就将旧 ID 推送到堆栈中。当您用完 C 页时,您查看堆栈并看到 B 是前一页,因此您弹出 B 并继续下一个 B 页。当您用完 B 页时,堆栈的顶部将是 A,然后您按预期移动。

    【讨论】:

    • 有时您只需要第二双眼睛。记录(在本例中)A3、B2 和 C2 然后在当前分支中没有更多页面时弹出堆栈非常有意义。
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 2012-10-18
    • 2021-03-17
    • 2011-08-05
    • 2011-10-02
    • 2019-01-25
    • 2018-09-02
    • 2018-06-16
    相关资源
    最近更新 更多