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

分类数据过滤与嵌套options数组构建技术问题求助

解决分类数据结构化问题:从API响应生成带子分类的父分类数组

我看了你的代码和数据,发现几个小问题导致你没得到期望的结果,咱们一步步来修正:

原代码的问题点

  • 存在一行完全无用的代码:person => { if (person.age > 18) return person; };,这行和分类处理毫无关系,直接删掉就好
  • 使用parentCategories.map(...)但没利用map的返回值,反而尝试用未定义的变量i给categorys[i]赋值,这会直接触发运行错误
  • 过滤子分类后,没有将子分类转换为仅包含name和id的对象,保留了原对象的多余字段
  • 最终返回的是对象categorys,但你期望的是数组格式

修正后的代码

export function getCategories(state = [], action) { 
  switch (action.type) { 
    case "FETCH_DATA_SUCCESS": 
      // 分离父分类与子分类
      const subCategories = action.data.categories.filter( 
        category => category.parent > 0 
      ); 
      const parentCategories = action.data.categories.filter( 
        category => category.parent === 0 
      ); 

      // 遍历父分类,生成目标格式数组
      const formattedCategories = parentCategories.map(parentCategory => {
        // 过滤当前父分类对应的子分类,并转换为仅含name和id的结构
        const options = subCategories
          .filter(sub => sub.parent === parentCategory.id)
          .map(sub => ({ name: sub.name, id: sub.id }));

        // 构造符合期望的父分类对象,value字段这里用原父分类id,可按需调整
        return {
          id: parentCategory.id,
          label: parentCategory.name.replace(/^year(\d)/, (_, num) => `Year ${num}`), // 把year1转为Year 1
          value: parentCategory.id,
          options: options
        };
      });

      return formattedCategories;
    default: 
      return state; 
  }
}

代码关键说明

  1. 分类分离:还是用filter把父分类(parent=0)和子分类(parent>0)拆分出来
  2. 子分类格式化:对每个父分类,先过滤出属于它的子分类,再用map把每个子分类转成仅包含name和id的对象,匹配你要的options结构
  3. 父分类格式化:把原父分类的name转成首字母大写加空格的格式(比如year1→Year 1),补充value字段(这里复用了父分类的id,如果你需要自增数字,可以用map的第二个参数index)
  4. 返回数组:map的结果就是我们需要的数组,直接返回即可

基于你的原始数据的输出结果

运行修正后的代码,会得到和你期望结构一致的数组:

[
  {
    id: 60,
    label: "Year 1",
    value: 60,
    options: [ { name: "firm1", id: 59 } ]
  },
  {
    id: 63,
    label: "Year 2",
    value: 63,
    options: [ { name: "firm1", id: 65 } ]
  },
  {
    id: 64,
    label: "Year 3",
    value: 64,
    options: [ { name: "firm3", id: 68 } ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:02:21