从递归函数返回

时间:2018-02-10 17:13:40

标签: javascript recursion

我有递归函数,它通过深层嵌套的对象或ojbects数组来查找并按键查找所需对象。问题是,当我想返回结果对象时,我得到了未定义,我不知道为什么。当我控制日志结果时,我得到了正确的结果。

function checkForDependency(name, scope) {
    if (Array.isArray(scope)) {
        scope.forEach((el) => {
            return checkForDependency(name, el)
        })
    } else if (typeof scope === 'object') {
        if (scope.hasOwnProperty('name') && scope.name == name && scope.hasOwnProperty('dependency')) {
            console.log('dependency:', scope.dependency)
            return {
                type: scope.dependency
            }
        } else {
            for (let key in scope) {
                if (Array.isArray(scope[key]) || typeof scope[key] === 'object') {
                    return checkForDependency(name, scope[key])
                }
            }
        }
    }
}

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

你可以使用临时变量,提前退出并检查临时变量是否有值,然后退出该函数。

您无需检查数组,因为您可以迭代数组的键或作为对象,这是相同的。

function checkForDependency(name, scope) {
    var temp;
    if (typeof scope !== 'object') {                    // early exit if no object
        return;
    }
    if (scope.name === name && 'dependency' in scope) { // check value and key
        console.log('dependency:', scope.dependency)
        return { type: scope.dependency };              // return found value
    }
    if (Object.keys(scope).some(key => temp = checkForDependency(name, scope[key]))) {
        return temp;
    }
}