[英]Why does a function return undefined?
我有一個數組,其中的每個值都表示世界的一側:
let array = ["NORTH", "SOUTH", "WEST", "EAST"];
如果 NORTH/SOUTH 或 EAST/WEST 站在一起,那么這些值將被刪除(SOUTH/NORTH 和 WEST/EAST 也被刪除)。 在這種情況下,函數必須返回空數組,而不是返回 undefined。 誰能解釋為什么會這樣。 抱歉犯了錯誤,我盡量不犯這些錯誤
let array = ["NORTH", "SOUTH", "WEST", "EAST"]; let obj = { "NORTH": 1, "SOUTH": -1, "WEST": 2, "EAST": -2 } function dirReduc(arr) { for (let i = 0; i < arr.length; i++) { if (i == arr.length - 1 || !arr.length) { return arr; } else if (obj[arr[i]] + obj[arr[i + 1]] == 0) { arr.splice(i, 2); return dirReduc(arr); } } } console.log(dirReduc(array));
當您的遞歸函數拼接掉所有內容時,就像在示例中一樣,函數的最深嵌套調用將不會迭代循環(因為數組為空),並返回undefined
。 該值也將從進行遞歸調用的點返回,因此主調用也將返回undefined
。
我建議不要使用遞歸,而是向后迭代。 這樣splice
調用不會對數組迭代產生負面影響,並且您只會對數組進行一次掃描:
function dirReduc(arr) {
for (let i = arr.length-2; i >= 0; i--) {
if (obj[arr[i]] + obj[arr[i + 1]] == 0) arr.splice(i, 2);
}
return arr;
}
您可以修改如下:
let array = ["NORTH", "SOUTH", "WEST", "EAST"];
let obj = {
"NORTH": 1,
"SOUTH": -1,
"WEST": 2,
"EAST": -2
}
function dirReduc(arr) {
for (let i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
return arr;
} else if (obj[arr[i]] + obj[arr[i + 1]] == 0) {
arr.splice(i, 2);
if (arr.length == 0)
return [];
return dirReduc(arr);
}
}
}
console.log(dirReduc(array));
希望這可以幫助。
您的數組長度減少到 0,因此 for 循環甚至沒有運行。
for (let i = 0; i < arr.length; i++) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.