如何递归查找深层嵌套数组中所有type等于question的对象
问题原因
你的代码存在两处核心错误:
- 循环内遇到携带
items属性的节点就直接return递归结果,直接终止了当前层级剩余元素的遍历,因此处理完标题为2的section之后,不会再继续处理标题为3的section - 入参中
item参数逻辑冗余,没有实际作用
修正后的代码
export const findQuestions = (items) => { const questions = []; for (const item of items) { if (item.type === 'question') { // 如果只需要title字段,可改为 questions.push({title: item.title}) questions.push(item); } // 存在子项则递归遍历,合并子项返回的结果 if (Object.prototype.hasOwnProperty.call(item, 'items')) { questions.push(...findQuestions(item.items)); } } return questions; };
如果你的运行环境支持可选链操作符,判断子项的逻辑可以简化为:
if (item.items?.length) { questions.push(...findQuestions(item.items)); }
调用方式
原有调用逻辑无需修改:
const questions = findQuestions([this.lastPage]);
内容的提问来源于stack exchange,提问作者Bruno Francisco
相关产品推荐
相关产品推荐

