调用外部JS文件findItem函数返回值为undefined问题求助
问题原因
你的findItem递归函数没有正确返回嵌套层级的查找结果,具体问题出在递归调用的分支上:
当你调用findItem(result.children, id)递归查找子节点时,没有将这一步的返回值向上传递给外层调用,导致子层级匹配到目标对象后,返回值只会停留在对应的递归层级,最终最外层调用拿到的就是undefined。
修复后的findItem代码
export const findItem = (array, id) => { for (let i = 0; i < array.length; i += 1) { const result = array[i] if (result.id === id) { console.log('2', result) return result } // 存在子节点的情况递归查找 if (result.children) { const childMatch = findItem(result.children, id) // 子层级找到匹配项就直接向上返回 if (childMatch) return childMatch } } }
原代码执行逻辑说明
你之前的代码里,当目标对象在子节点层级时:
- 子层级的递归调用确实匹配到了目标,执行
return result把结果返回给了上一层调用 - 但上一层调用没有接收并返回这个结果,函数会继续执行循环,最终循环结束后没有显式返回值,默认返回
undefined,所以最外层拿到的就是undefined - 你在子层级打印
console.log('2', result)能正常输出,只是证明匹配逻辑没问题,但是返回值没有正确传递到最外层而已
内容的提问来源于stack exchange,提问作者NuoNuo LeRobot
相关产品推荐
相关产品推荐

