Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的递归函数返回未定义?_Javascript_Arrays_Recursion - Fatal编程技术网

Javascript 为什么我的递归函数返回未定义?

Javascript 为什么我的递归函数返回未定义?,javascript,arrays,recursion,Javascript,Arrays,Recursion,我正在处理代码出现的第7天,当findNestedBags中的基本情况达到第一个条件(data[key]。includes(color))时,我的代码为什么会返回undefined。当第二种情况为真时,它返回0,所以我不明白为什么一个有效而另一个无效 我们的目标是计算出有多少种不同的袋子会产生一个包含“闪亮黄金”袋子的袋子。如果某个彩色包包含一个闪亮的金色包作为选项(可在键/值对的值中找到),则它是一个选项。或者,如果列表中的一个包在其键/值对中有闪亮的金色作为选项,那么也可以计算 这是变量da

我正在处理代码出现的第7天,当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)
    }
}