我有一个名为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)的展开后,for循环退出。我不确定为什么for循环不会继续使用其余三个键。如果有人能指出我正确的方向,我将不胜感激。谢谢!
答案 0 :(得分:2)
不要在循环内返回。那将退出您的递归。相反,您需要再次调用该函数,这与返回它是不同的。
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));
答案 1 :(得分:2)
除了对象的false返回语句之外,您还可以使用一个函数并为嵌套对象添加函数的返回结果。
function nestedEvenSum(obj) {
let sum = 0;
for (let i in obj) {
if (typeof obj[i] === "number" && obj[i] % 2 === 0) sum += obj[i];
if (obj[i] && typeof obj[i] === 'object') sum += nestedEvenSum(obj[i]);
}
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));