gpt4 book ai didi

javascript - 为什么函数返回未定义?

转载 作者:行者123 更新时间:2023-12-02 22:22:50 25 4
gpt4 key购买 nike

我有一个数组,其中的每个值都代表世界的一面:

let array = ["NORTH", "SOUTH", "WEST", "EAST"];

如果北/南或东/西在一起,则这些值将被删除(南/北和西/东也将被删除)。在这种情况下,该函数必须返回空数组,而不是返回未定义。谁能解释为什么会发生这种情况。抱歉犯了错误,我尽量不犯这些错误

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 。该值也将从进行递归调用的位置返回,因此主调用也将返回未定义

我建议不要使用递归,而是向后迭代。这样,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;
}

关于javascript - 为什么函数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59169846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com