我有一個遞回函式來處理多層深度的嵌套陣列。下面的代碼應該從每個級別中選擇隨機元素,并將它們組合成一個陣列(按照它們在控制臺中列印的順序)。但是,結果陣列僅包含最高級別的元素(A、B 或 C、D 或 C),沒有低于此級別的元素。這是什么原因?
const arry = [
["A"],
["B", "C"],
["D", "E"],
[
[
["F1", "F2"],
["G1", "G2"],
[
"H1",
"H2",
[
["I1", "I2", "I3"],
["J1", "J2"],
["K1", "K2", "K3"],
],
],
],
],
];
function rndmElementSelection(array) {
rndElm = array[Math.floor(Math.random() * array.length)];
return rndElm;
}
function recursion(array, resultAry = []) {
array.forEach((element) => {
if (typeof element === "string") {
console.log(element);
resultAry.push(element);
} else {
nE = rndmElementSelection(element);
if (typeof nE === "string") {
console.log(nE);
resultAry.push(nE);
} else {
recursion(nE);
}
}
});
return resultAry;
}
console.log(recursion(arry));
uj5u.com熱心網友回復:
問題是您的遞回呼叫沒有傳遞第二個引數。
如果不傳遞它,每個遞回呼叫只會填充它自己的新陣列。它確實將該陣列回傳給呼叫者,但呼叫者(進行遞回呼叫)忽略了該回傳值,因此遞回呼叫的所有作業都是徒勞的。
所以簡單的解決方法是改變這個:
} else {
recursion(nE);
對此:
} else {
recursion(nE, resultAry);
uj5u.com熱心網友回復:
嘗試這個
function recursion(array, resultAry = []) {
array.forEach((element) => {
if (typeof element === "string") {
console.log(element);
resultAry.push(element);
} else {
nE = rndmElementSelection(element);
if (typeof nE === "string") {
console.log(nE);
resultAry.push(nE);
} else {
resultAry = [...resultAry, ...recursion(nE)];
}
}
});
return resultAry;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493071.html
標籤:javascript 递归 多维数组
