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

JS如何递归获取嵌套JSON分类数组的各节点全路径字符串数组

嵌套产品分类提取全路径实现

需求说明

现有嵌套层级无上限的产品分类JSON数组,每个节点可包含children子分类属性,需要提取所有节点的分类全路径,输出为字符串数组,路径各级名称用>拼接。

输入示例

[
  {
    "PRODUCT_CATEGORY_ID": "1",
    "NAME": "OTOMOBİL PARÇALARI",
    "DESCRIPTION": "Araba Parçaları",
    "ACTIVE": "True",
    "PARENT_PRODUCT_CATEGORY_ID": "",
    "children": [
      {
        "PRODUCT_CATEGORY_ID": "3",
        "NAME": "HONDA PARÇALARI",
        "DESCRIPTION": "Honda Parçaları",
        "ACTIVE": "True",
        "PARENT_PRODUCT_CATEGORY_ID": "1"
      },
      {
        "PRODUCT_CATEGORY_ID": "4",
        "NAME": "RENAULT PARÇALARI",
        "DESCRIPTION": "Renault Parçaları",
        "ACTIVE": "True",
        "PARENT_PRODUCT_CATEGORY_ID": "1",
        "children": [
          {
            "PRODUCT_CATEGORY_ID": "5",
            "NAME": "MINIMAL RENAULT PARÇALARI",
            "DESCRIPTION": "",
            "ACTIVE": "True",
            "PARENT_PRODUCT_CATEGORY_ID": "4"
          }
        ]
      }
    ]
  }
]

期望输出

[
  "OTOMOBİL PARÇALARI",
  "OTOMOBİL PARÇALARI > HONDA PARÇALARI",
  "OTOMOBİL PARÇALARI > RENAULT PARÇALARI",
  "OTOMOBİL PARÇALARI > RENAULT PARÇALARI > MINIMAL RENAULT PARÇALARI"
]

原代码问题说明

你提供的代码存在以下问题:

  1. 适配的是扁平结构数据,没有利用已有的children嵌套结构
  2. 字段名不匹配,你的数据中分类ID字段为PRODUCT_CATEGORY_ID、名称字段为NAME,不是代码中的id、name、parent
  3. 路径拼接逻辑错误,没有累加父级分类名称,仅添加了前缀分隔符

正确实现代码

/**
 * 提取嵌套分类的全路径数组
 * @param {Array} categories 嵌套分类数组
 * @param {string} parentPath 父级路径,递归时自动传入
 * @param {Array} result 结果数组,递归时自动传入
 * @returns {Array} 全路径字符串数组
 */
function getCategoryFullPaths(categories, parentPath = '', result = []) {
  categories.forEach(category => {
    // 拼接当前节点完整路径
    const currentFullPath = parentPath ? `${parentPath} > ${category.NAME}` : category.NAME
    result.push(currentFullPath)
    // 存在子分类则递归处理
    if (Array.isArray(category.children) && category.children.length > 0) {
      getCategoryFullPaths(category.children, currentFullPath, result)
    }
  })
  return result
}

// 调用示例,假设原始数据存在categoryData变量中
const pathResult = getCategoryFullPaths(categoryData)
console.log(pathResult)

内容的提问来源于stack exchange,提问作者RıdvanÖnal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:09:05