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,求大神解惑这是哪地方写错了。
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
arr == ["NORTH","WEST","SOUTH","EAST"]数组不能直接止对比,就算数组项一样并且先后一直也是false
得到undefined说明没有指定到return那个if分支。。
if (num == arr.length - 1 || arr == '' || arr.join() == ["NORTH", "WEST", "SOUTH", "EAST"].join())
谢谢回答,最后一个条件里的确应该修改成这样
不过问题中的情况是走的第一个判断条件,也就是num == arr.length - 1的情况,因为后面的alert(arr)正确弹出了,而且arr中内容也是想要的结果
但最后函数返回的却是undefined。不知道这个问题能如何解决了
var arr2 = ["WEST","NORTH"];
var num1 = 0;
function checkDir(arr,num){
if (num == arr.length-1 || arr == '' || arr == ["NORTH","WEST","SOUTH","EAST"]) {
return arr;
}else{
var curArr = arr[num];
if(curArr == "NORTH"){
return dirCompare("SOUTH",num,arr);
}else if(curArr == "SOUTH"){
return dirCompare("NORTH",num,arr);
}else if(curArr == "EAST"){
return dirCompare("WEST",num,arr);
}else if(curArr == "WEST"){
return dirCompare("EAST",num,arr);
}
}
}
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);
}
};
if (switch1 == 0){
num++;
return checkDir(arr1,num);
}
}
var resObj = checkDir(arr2,num1);
alert(resObj);
主要是 return 的问题 引起的 undefined 有的逻辑 有return 有的逻辑 没有return 最后还要有结果 就出问题了