优化树状控制结构

Mar*_*o D 6 javascript php algorithm code-readability

我必须根据用户输入创建报告.用户回答一个问题,然后根据答案我在树状结构中向左或向右走,并提出一个新问题.一些节点将有相同的问题,但不同的孩子.我不确定在代码可读性方面最好的方法是什么?

我想避免巨大的控制结构,因为它将是非常难以理解的,像这样:

if() {
    if() {
        if() {
            if() {
                ... 
            }
        }
        else {
            if() {
                ...
            }
        }
    }
    else {
        ...
    }
}
else {
    if() {
        if() {
            if() {
                ...
            }
        }
        else {
            if () {
                ...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理它?这是我树如何看的图像

在此输入图像描述

Spa*_*key 2

将树存储为数据,这样您的代码就可以非常小。如果我们稍微修改@jam6549给出的答案,我们可以得出这样的结果:

var answer = [ {t: "Does it have fur?", y: 1,  n: 2},
               {t: "Is it a kitten?",   y: 3,  n: 4},
               {t: "Is it a goldfish?", y: 5,  n: 4},
               {t: "Found a kitten",    y: -1, n: -1},
               {t: "I'm stumped",       y: -1, n: -1},
               {t: "Found a goldfish",  y: -1, n: -1} ];
var state = 0;

while ( answer[state].y >= 0 ) {
    var choice = confirm(answer[state].t);
    state = choice? answer[state].y: answer[state].n;
}
alert(answer[state].t);
Run Code Online (Sandbox Code Playgroud)

这仅支持简单的 y/n 答案,因此我可以使用确认,您将需要使用一个数组,其中包含每个可能答案的条目。

你说有些问题是重复的,所以我很想拥有一个包含每个独特问题文本的数组。然后,您的答案数组将索引存储到问题数组中以保存重复的文本。