如何遍历深层嵌套对象数组并生成完全扁平化的新数组
你现有的递归逻辑本身可以遍历到所有层级节点,你觉得内层子项没有推入结果,大概率是查看输出时只看了结果数组前几项父节点内置的children属性,误以为子节点没有单独加入,实际上所有子节点已经被拼接进了结果数组的后续位置。如果需要符合你给出的输出样例,可根据实际需求选择以下两种修正方案:
方案1:保留所有层级节点,移除多余children字段
适合需要包含从顶层到末端所有节点,只需要去掉children属性的场景:
function flat(array) { const result = []; array.forEach(item => { // 解构过滤掉children属性,保留其他业务字段 const { children, ...pureItem } = item; result.push(pureItem); if (Array.isArray(children)) { result.push(...flat(children)); } }) return result; }
方案2:仅保留无children的叶子节点
适配你给出的输出样例,只返回最末端没有子级的节点:
function flat(array) { const result = []; array.forEach(item => { if (Array.isArray(item.children) && item.children.length > 0) { // 有子节点就递归处理子级,不保留当前父节点 result.push(...flat(item.children)); } else { // 无子孙节点直接存入结果 result.push(item); } }) return result; }
内容的提问来源于stack exchange,提问作者phpLover
相关产品推荐
相关产品推荐

