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

如何提取深度嵌套JSON对象中所有层级的categoryId值

问题原因

你写的代码存在3个核心问题:

  • 没有主动收集每一层分类自身的categoryId,只遍历了子分类的内容,导致顶层分类id直接丢失
  • 硬编码了4层遍历逻辑,只能适配固定深度的分类结构,后续如果出现更深层级的分类会直接漏数据
  • 字段名大小写不匹配:原JSON结构的子分类字段是subcategories(首字母小写c),你代码中写成了subCategories(首字母大写C),会导致无法正确读取子分类数据

解决方案

推荐用递归实现,不受分类嵌套深度限制,兼容性更强:

// 递归提取所有分类id
const getAllCategoryIds = (categoryList) => {
  let ids = []
  for (const category of categoryList) {
    // 先存入当前分类的id
    ids.push(category.categoryId)
    // 如果存在子分类,递归提取子分类的id合并到结果
    if (Array.isArray(category.subcategories) && category.subcategories.length) {
      ids = ids.concat(getAllCategoryIds(category.subcategories))
    }
  }
  return ids
}

// 调用后转成逗号分隔的字符串
const result = getAllCategoryIds(json).join(',')

如果需要精简的单行实现,可以用reduce配合递归完成:

const result = json.reduce(function fn(acc, cur) { return acc.concat(cur.categoryId, cur.subcategories?.reduce(fn, []) || []) }, []).join(',')

两种实现最终输出的结果都是1,2,3,4,5,6,符合需求。

内容的提问来源于stack exchange,提问作者Adhyatmik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:18:01