naruto4364 2015-10-13 07:06 采纳率: 100%
浏览 1564
已采纳

求大神指导一个JS问题

var arr2 = ["WEST","NORTH"];
var num1 = 0;
function checkDir(arr,num){
        if (num == arr.length-1 || arr == '' || arr == ["NORTH","WEST","SOUTH","EAST"]) {
            alert(arr);
            return arr;
        }else{
            alert("走了这里");
        switch(arr[num]){
            case "NORTH":
            alert(1);
            dirCompare("SOUTH",num,arr);
            break;
            case "SOUTH":
            alert(2);
            dirCompare("NORTH",num,arr);
            break;
            case "EAST":
            alert(3);
            dirCompare("WEST",num,arr);
            break;
            case "WEST":
            alert(4);
            dirCompare("EAST",num,arr);
            break;
        }
    }
}


function dirCompare(str,num,arr1){
    var switch1 = 0;
    for (var i = num+1; i < arr1.length; i++) {
        if (arr1[i]==str){
            arr1.splice(num,1);
            arr1.splice(i-1,1);
            switch1 = 1;
            checkDir(arr1,num);
            return;
        }
    };
    if (switch1 == 0){
        num++;
        alert(arr1 + "-" + num);
        checkDir(arr1,num);
    }
} 
alert(checkDir(arr2,num1));

这是一个判断方向的需求,每一对东西或南北都被剔除,上面函数里直接判断无法消除的两个方向,一直到第一个if条件中的alert都能正确返回需要的结果,但是后面的return arr似乎就没有被执行,最后函数返回值也是undefined,求大神解惑这是哪地方写错了。

  • 写回答

5条回答 默认 最新

  • Go 旅城通票 2015-10-13 08:08
    关注
         var arr2 = ["WEST", "NORTH"];
        var num1 = 0;
        function checkDir(arr, num) {
            if (num == arr.length - 1 || arr == '' || arr.join() == ["NORTH", "WEST", "SOUTH", "EAST"]) {
                alert(arr);
                alert('return')
                return arr;
            } else {
                alert("走了这里");
                switch (arr[num]) {
                    case "NORTH":
                        alert(1);
                       return dirCompare("SOUTH", num, arr);/////////要return返回值
                        break;
                    case "SOUTH":
                        alert(2);
                        return dirCompare("NORTH", num, arr);/////////要return返回值
                        break;
                    case "EAST":
                        alert(3);
                        return dirCompare("WEST", num, arr);/////////要return返回值
                        break;
                    case "WEST":
                        alert(4);
                        return dirCompare("EAST", num, arr);/////////要return返回值
                        break;
                }
            }
        }
    
    
        function dirCompare(str, num, arr1) {
            var switch1 = 0;
            for (var i = num + 1; i < arr1.length; i++) {
                if (arr1[i] == str) {
                    arr1.splice(num, 1);
                    arr1.splice(i - 1, 1);
                    switch1 = 1;
                    return checkDir(arr1, num);/////////要return返回值
                    //return;
                }
            };
            if (switch1 == 0) {
                num++;
                alert(arr1 + "-" + num);
                return checkDir(arr1, num);/////////要return返回值
            }
        }
        alert(checkDir(arr2, num1));
    

    除非第一次执行checkDir成功才会执行return,else分支你的其他函数要增加return

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog