如何在类树结构上执行多层嵌套的Lodash GroupBy操作?
解决方案
你可以通过lodash的链式调用组合内置方法实现需求,无需手写复杂循环逻辑,实现代码如下:
// originalChild 为你给出的原始child数组 const output = { child: _.chain(originalChild) // 预处理:拆分parents路径为层级数组,过滤空字符串 .map(item => ({ ...item, pathSegments: item.parents.split('/').filter(Boolean) })) // 按一级路径分组(对应顶层Test123层级) .groupBy('pathSegments[0]') // 转换顶层节点格式 .map((secondLevelItems, topLevelName) => ({ itemName: topLevelName, subPackages: _.chain(secondLevelItems) // 按二级路径分组(对应Diet、Reg3、Regular层级) .groupBy(item => item.pathSegments[1] || item.itemName) // 转换二级节点格式 .map((subSubItems, secondLevelName) => { // 匹配typeOfPackage为sub的节点 const subItem = subSubItems.find(i => i.typeOfPackage === 'sub') if (subItem) { return { ..._.omit(subItem, '_id'), subSubPackages: [] } } // 处理需要挂载subSubPackages的二级节点 return { itemName: secondLevelName, subSubPackages: subSubItems.map(i => _.omit(i, ['pathSegments', '_id'])) } }) .value() })) .value() }
效果说明
- 自动按
parents字段拆分的层级完成多级分组,和你给出的预期输出结构完全匹配 - 自动识别
typeOfPackage: 'sub'的节点,保留原始字段同时挂载空的subSubPackages数组 - 自动剔除预处理生成的临时字段
pathSegments和不需要输出的_id字段
内容的提问来源于stack exchange,提问作者FarhanH141
相关产品推荐
相关产品推荐

