我有递归函数,它通过深层嵌套的对象或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])
}
}
}
}
}
你能帮我吗?
答案 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;
}
}