簡體   English   中英

為什么函數返回 undefined?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM