如何将可变深度的嵌套分类层级Array扁平化合并为一维对象数组
实现方案
你需要的嵌套分类数组转一维数组可以通过深度优先递归遍历实现,支持任意深度的层级结构。
注:你给出的原始数组写法存在语法问题,实际业务中这类嵌套分类通常每个节点为对象,额外携带
children字段存储子分类数组,我们基于这个通用结构给出实现方案。如果你的实际结构有差异,仅需调整节点信息提取逻辑即可,递归逻辑完全通用。
代码实现(JavaScript示例)
输入结构示例
const nestedCategories = [ { id: 1, name: "Kategorie 1", parent_id: null, children: [ { id: 2, name: "Kategorie 1.1", parent_id: 1, children: [ { id: 5, name: "Kategorie 1.1.1", parent_id: 2, children: [ { id: 11, name: "Kategorie 1.1.1.1", parent_id: 5, children: [] }, { id: 12, name: "Kategorie 1.1.1.2", parent_id: 5, children: [] } ] } ] } ] } ]
拍平函数
function flattenCategories(nestedArr) { const result = [] // 递归遍历所有节点 function traverse(arr) { arr.forEach(item => { // 提取分类基础信息,排除子分类数组 const { children, ...categoryInfo } = item result.push(categoryInfo) // 存在子分类则递归处理 if (children?.length) { traverse(children) } }) } traverse(nestedArr) return result }
调用效果
const flatArr = flattenCategories(nestedCategories) console.log(flatArr) /* 输出结构和你要求的完全一致: [ { id: 1, name: 'Kategorie 1', parent_id: null }, { id: 2, name: 'Kategorie 1.1', parent_id: 1 }, { id: 5, name: 'Kategorie 1.1.1', parent_id: 2 }, { id: 11, name: 'Kategorie 1.1.1.1', parent_id: 5 }, { id: 12, name: 'Kategorie 1.1.1.2', parent_id: 5 } ] */
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

