JS递归地在父子数组中查找元素

时间:2020-02-19 17:39:12

标签: javascript arrays recursion

我有一个带有嵌套父子结构的数组。我需要递归地遍历这个数组并找到想要的元素。 我写了这个函数:

recursivelyFindElementByCondition(nodes, isSatisfyingCondition) {

    function recursiveCheck(items) {
        for (const item of items) {
            if (isSatisfyingCondition(item)) {
                return item;
            }

            if (item.rows) {
                recursiveCheck(item.rows)
            }
        }
    }

    return recursiveCheck(nodes);
}

但是我不明白为什么它返回undefined。据我了解,它应该工作正确。 我知道有一种方法可以在递归函数的作用域之外创建变量并为其分配元素,然后最后将其返回,只是想在没有不必要的变量的情况下执行该操作,并且不知道为什么上面的方法不起作用。

1 个答案:

答案 0 :(得分:2)

必须返回递归调用的结果,以使其传播到调用点并作为结果返回。

function findNode(nodes, predicate) {
    for (const node of nodes) {
        if (predicate(node)) return node

        if (node.rows) {
            let match = findNode(node.rows, predicate)
            if (match) return match
        }
    }
}

const tree = [{
    value: 'a',
    rows: [{
        value: 'b'
    }]
}, {
    value: 'c',
    rows: [{
        value: 'd',
        rows: [{
            value: 'e'
        }]
    }]
}]

const result = findNode(tree, ({value}) => value === 'e')

console.log(result)