在一个reucrsive函数内部查看

时间:2017-03-03 15:12:44

标签: javascript

请参阅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"]

1 个答案:

答案 0 :(得分:0)

这就是我想出的。 https://jsfiddle.net/j6s1vouv/4/需要一种方法来通知父母,过滤器已经满足并且应该跳过兄弟迭代。

{{1}}