Javascript 为什么我的递归函数返回未定义?
我正在处理代码出现的第7天,当Javascript 为什么我的递归函数返回未定义?,javascript,arrays,recursion,Javascript,Arrays,Recursion,我正在处理代码出现的第7天,当findNestedBags中的基本情况达到第一个条件(data[key]。includes(color))时,我的代码为什么会返回undefined。当第二种情况为真时,它返回0,所以我不明白为什么一个有效而另一个无效 我们的目标是计算出有多少种不同的袋子会产生一个包含“闪亮黄金”袋子的袋子。如果某个彩色包包含一个闪亮的金色包作为选项(可在键/值对的值中找到),则它是一个选项。或者,如果列表中的一个包在其键/值对中有闪亮的金色作为选项,那么也可以计算 这是变量da
findNestedBags
中的基本情况达到第一个条件(data[key]。includes(color)
)时,我的代码为什么会返回undefined
。当第二种情况为真时,它返回0,所以我不明白为什么一个有效而另一个无效
我们的目标是计算出有多少种不同的袋子会产生一个包含“闪亮黄金”袋子的袋子。如果某个彩色包包含一个闪亮的金色包作为选项(可在键/值对的值中找到),则它是一个选项。或者,如果列表中的一个包在其键/值对中有闪亮的金色作为选项,那么也可以计算
这是变量data
中的数据结构示例,仅包含更多行:
data = {
'vibrant violet': [ 'light gray', 'wavy aqua' ],
'dim fuchsia': [ 'vibrant white', 'pale beige', 'shiny gold' ],
'drab fuchsia': [ 'dotted turquoise', 'dull crimson', 'plaid violet' ],
'dim purple': [ 'plaid silver', 'posh gray', 'plaid beige' ],
'mirrored lavender': [ 'vibrant lime', 'vibrant violet', 'mirrored aqua', 'clear black' ],
'posh green': []
}
forEach
不返回值。如果要对所有结果求和,可以使用Array#reduce
。此外,通过传入第二个参数,可以将累加器的初始值设置为0
,这样就可以取消对数组长度为0
的检查
function findNestedBags(key, color, data) {
if (data[key].includes(color)) {
return 1
} else {
return data[key].reduce((acc,item) => {
return acc + findNestedBags(item, color, data)
}, 0)
}
}
…如果它是一个数组,则不需要首先测试
length==0
either@Bergi谢谢你指出这一点。
function findNestedBags(key, color, data) {
if (data[key].includes(color)) {
return 1
} else {
return data[key].reduce((acc,item) => {
return acc + findNestedBags(item, color, data)
}, 0)
}
}