1
請看fiddle。 我有點卡住了爲什麼循環不打破我的意圖。從一個看起來裏面有一個reucrsive功能
input
是一個對象,用某種id索引。值是兒童ID。所以,我試圖過濾掉(這裏是硬編碼爲d
)節點及其子節點。例如,對於d
,只有一個孩子,h
。所以,我期待輸出['d', 'h']
。這是因爲,一旦過濾條件滿足(c === 'd'
),它會丟棄所有以前的值,並在這種情況下遞歸給子項(僅限於h
)。一旦遞歸到孩子完成,中斷應該終止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"]
這將有助於如果你解釋_intended behaviour_ – Alnitak
使用while語句,或[] .forEach(),而不是 – Supersharp
@Supersharp出於好奇,什麼是錯的for循環。我認爲break可以和'for'一起工作 – bsr