首页 > 解决方案 > 使用递归检查元素是否为数组

问题描述

我想检查数组中的元素是否是另一个数组。我正在解决一个代码挑战,其中问题是遍历数组并检查 7,但如果元素是数组,我想连续检查每个嵌套数组是否有 7。

我的第一个'if'语句中有console.log(),并且我看到sevenBoom() 被多次调用。但由于某种原因,它没有返回“Boom!”

SevenBoom 应该返回“Boom!” 如果有七。

    function sevenBoom(arr) {
      if (arr.includes(7)) {
        return "Boom!";
      }
    
      arr.forEach((val) => {
        if (Array.isArray(val)) sevenBoom(val);
      });
    }

    sevenBoom([1, 3, 4, 6, [7]) // Returns undefined
    sevenBoom([3, 7, 8, 9]) // Returns 'Boom!'

标签: javascriptarraysrecursion

解决方案


您可以将布尔值作为结果并Array#some用于检查数组。

function hasSeven(array) {
    function seven(a) {
        return a.includes(7) || a.some(v => Array.isArray(v) && seven(v));
    }
    return seven(array)
        ? 'Boom!'
        : 'There is no 7';
}


console.log(hasSeven([7]));
console.log(hasSeven([[7]]));
console.log(hasSeven([[[7]]]));

console.log(hasSeven([]));
console.log(hasSeven([[]]));
console.log(hasSeven([[[]]]));


推荐阅读