You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在类树结构上执行多层嵌套的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:15:02