请参阅fiddle。 我有点担心为什么循环不会打破我的意图。
input
是一个对象,用某种id索引。而值是儿童ID。所以,我试图过滤掉(这里它被硬编码为d
)一个节点及其子节点。例如,对于d
,只有一个孩子h
。所以,我期待输出['d', 'h']
。这是因为,一旦过滤条件满足(c === 'd'
),它就会丢弃所有先前的值,并在这种情况下只递归到其子项(仅h
)。一旦递归到子节点,break就应该终止for循环。但正如我从输出中看到的那样,for循环不会中断并继续(c
- > g
)。如何在过滤器满足时这样做,在这种情况下它只输出节点及其所有子节点['d', 'h']
。
const input = {
a: ['b', 'c'],
b: ['d', 'e', 'f'],
c: ['g'],
d: ['h'],
}
let data = [];
const recur = (d) => {
const ch = input[d]
if (!ch) {
return;
}
for (let i = 0; i < ch.length; i++) {
console.log(data)
const c = ch[i]
data.push(c)
if (c === 'd') {
data = [c];
console.log("reset data", data)
recur(c)
break
}
recur(c)
}
}
recur('a')
console.log("end: ", data)
输出:end: ["d", "h", "c", "g"]