JavaScript对象键查找函数console.log输出undefined,期望返回指定提示
递归查找对象键值返回undefined的问题修复
你这个函数的问题出在两个核心点:
- 递归调用时没有返回递归分支的结果,导致深层递归的返回值根本传递不到上层函数;
- 遍历对象时过早返回"data not found",只要当前遍历的键不匹配且不是对象,就直接终止函数,但对象可能还有未遍历的键,这会漏掉后续可能的匹配项。
修复后的代码
const data = { level1: { level2: { level3: 'some data' } } } function finData(object, key) { for (const item in object) { if (item === key) { return object[item]; } else if (typeof object[item] === 'object' && object[item] !== null) { // 接收递归结果,找到目标则直接返回 const result = finData(object[item], key); if (result !== "data not found") { return result; } // 没找到就继续遍历当前对象的其他键 } } // 遍历完当前对象所有键+递归分支都没找到,才返回提示 return "data not found"; } console.log(finData(data, 'level4')); // 输出 "data not found" console.log(finData(data, 'level3')); // 输出 "some data"
关键修改说明
- 递归结果传递:把递归调用的结果存到变量里,判断如果不是未找到的提示,就直接返回这个结果,确保深层找到的值能传递到顶层调用。
- 延迟返回未找到提示:把"return 'data not found'"移到循环外部,只有当当前对象的所有键都遍历完毕,且所有递归分支也没找到目标时,才返回提示,避免提前终止循环漏掉可能的匹配。
- 增加null判断:
typeof null会返回'object',加这个判断可以避免把null当成对象递归进去,减少不必要的错误。
内容的提问来源于stack exchange,提问作者msp
相关产品推荐
相关产品推荐

