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" ]
原代码问题说明
你提供的代码存在以下问题:
- 适配的是扁平结构数据,没有利用已有的
children嵌套结构 - 字段名不匹配,你的数据中分类ID字段为
PRODUCT_CATEGORY_ID、名称字段为NAME,不是代码中的id、name、parent - 路径拼接逻辑错误,没有累加父级分类名称,仅添加了前缀分隔符
正确实现代码
/** * 提取嵌套分类的全路径数组 * @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
相关产品推荐
相关产品推荐

