【发布时间】:2020-03-28 21:23:42
【问题描述】:
我有一个数组,其中的每个值都表示世界的一侧:
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));
【问题讨论】:
-
该函数中没有一个 return 语句,您如何期望返回任何内容?您在适当的位置修改数组 - 执行
dirReduc(array); console.log(array);并查看差异。 -
如果任何一个条件没有通过,函数就会执行到最后,此时没有
return语句。 -
抱歉,我解决了这个问题。
-
在两次递归调用之后,您的数组将为空,因此在最深的调用中,循环在没有迭代的情况下完成,然后...什么也不返回(没有
return),即@987654326 @。这也将在递归的上层返回。
标签: javascript recursion