gpt4 book ai didi

javascript - 递归函数过早退出for循环

转载 作者:行者123 更新时间:2023-11-28 14:20:20 29 4
gpt4 key购买 nike

我有一个名为 nestedEvenSum 的函数,它接受一个 object 作为参数,并循环遍历 object 尝试查找 的值>偶数。当它找到偶数时,会将其添加到变量 sum 中。这是我的代码:

function nestedEvenSum (obj) {
let sum = 0;
function inner(obj) {
for (let i in obj) {
if (typeof obj[i] === "number" && obj[i] % 2 === 0) sum += obj[i];
if (typeof obj[i] === 'object') return inner(obj[i]);
}
}
inner(obj);
return sum;
}

我为我的函数提供以下对象:

var obj2 = {
a: 2,
b: {b: 2, bb: {b: 3, bb: {b: 2}}},
c: {c: {c: 2}, cc: 'ball', ccc: 5},
d: 1,
e: {e: {e: 2}, ee: 'car'}
};

并且我的循环不断返回 6 而不是 10。由于某种原因,在递归 inner() 调用第二个键 (b) 的 unwind 后,for 循环退出。我不确定为什么 for 循环不继续使用剩下的三个键。如果有人能指出我正确的方向,我将不胜感激。谢谢!

最佳答案

不要返回循环内部。这将退出你的递归。相反,您需要再次调用该函数,这与返回它不同。

function nestedEvenSum (obj) {
let sum = 0;
function inner(obj) {
for (let i in obj) {
if (typeof obj[i] === "number" && obj[i] % 2 === 0) sum += obj[i];
if (typeof obj[i] === 'object') inner(obj[i]);
}
}
inner(obj);
return sum;
}

var obj2 = {
a: 2,
b: {b: 2, bb: {b: 3, bb: {b: 2}}},
c: {c: {c: 2}, cc: 'ball', ccc: 5},
d: 1,
e: {e: {e: 2}, ee: 'car'}
};

console.log(nestedEvenSum(obj2));

关于javascript - 递归函数过早退出for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424448/

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