Return返回Javascript中未定义的返回

时间:2018-12-20 09:45:06

标签: javascript

我需要编写一个程序来遍历Javascript中的迷宫,其中1是源,2是目的地,3是路径,0是墙。下面是我编写的代码。该代码是正确的,但是只有在使用console.log()时我才能得到答案,而在返回字符串yes或no时则无法得到答案。为什么会这样呢?

function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
    }
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                console.log("yes");
                // return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                console.log("No");
                // return "No";
            }
        }
}

输入

arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]];
answer = sourceDes(arr);
answer;

在console.log()

时输出
yes

返回值并在功能上应用console.log时输出

undefined

5 个答案:

答案 0 :(得分:1)

您缺少sourceDes函数中的return语句

答案 1 :(得分:1)

return语句应该在两个函数中,否则返回未定义

答案 2 :(得分:1)

在Javascript中,当您在函数内省略return语句时,将假定为隐式return undefined。这就是为什么您获得此返回值。

答案 3 :(得分:1)

我检查了您的代码,并在sourceDes函数中发现了一个错误。您没有在函数中定义return语句。

function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
    }
}

最后一次运行循环时,您的if条件变为false,这就是为什么要重试 undefined 的原因。检查下面的代码,我添加了else部分,如果条件为false,则返回

arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]];
function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
            traverse(i,j);
            break;
        }
		else{
		    return "No";
		}
    }
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                console.log("yes");
                 return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                console.log("No");
                 return "No";
            }
        }
}


answer = sourceDes(arr);
document.write(answer);

答案 4 :(得分:0)

使用以下代码段。我已经添加了变量并在循环中设置了值,并在函数末尾返回了结果变量。

function sourceDes(arr) {
var result='';
for (var i=0;i<arr.length;i++) {
    for (var j=0;j<arr[i].length; j++) {
        if (arr[i][j] == 1) {
           result= traverse(i,j);
            break;
        }
    }
 return result;
}

function traverse(rowPos, colPos) {
            if (arr[rowPos][colPos] == 2) {
                //console.log("yes");
                 return "Yes";
            }
            else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
                arr[rowPos][colPos] = 9;

                if(rowPos < arr.length - 1) {
                    return traverse(rowPos + 1, colPos);
                }
                if(colPos < arr[rowPos].length - 1) {
                    return traverse(rowPos, colPos + 1);
                }
                if(rowPos > 0) {
                    return traverse(rowPos - 1, colPos);
                }
                if(colPos > 0) {
                    return traverse(rowPos, colPos - 1);
                }
            }               
            else if (arr[rowPos][colPos] == 0) {
                //console.log("No");
                 return "No";
            }
        }
}