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

求助:修正TypeScript数组循环代码,实现按code分组并排序输出

问题修正:按code字段分组并对selectedList按order升序排列

需求说明

需要遍历一组数据,生成按code字段分组、且每组内的selectedList元素按order升序排列的指定结构输出。

原代码问题分析

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

  • selectedOrders未初始化为数组,无法调用push方法
  • 集合set判断的是list.code,但添加的是list.serviceCode(字段名不匹配)
  • 使用map遍历却未利用返回值,改用forEach更合适
  • 重复向selectedOrders推送新对象,而非往对应code的selectedList中追加元素
  • 缺少对selectedList按order升序排序的逻辑
  • 类型定义存在语法错误,且目标结构需要的是desc而非language字段

修正后的TypeScript代码

function processOrders(orders: Array<{ code: string; name: string; desc: string; order: number }>) {
  // 按code分组,保留原数据的order用于排序
  const grouped = orders.reduce((acc, item) => {
    if (!acc[item.code]) {
      acc[item.code] = [];
    }
    acc[item.code].push(item);
    return acc;
  }, {} as Record<string, typeof orders>);

  // 转换为目标结构,同时对每组数据按order升序排序
  const result = Object.entries(grouped).map(([code, items]) => {
    // 按order字段升序排序
    const sortedItems = items.sort((a, b) => a.order - b.order);
    // 提取需要的字段组成selectedList
    const selectedList = sortedItems.map(({ name, desc }) => ({ name, desc }));
    return { code, selectedList };
  });

  return result;
}

输入输出验证

输入数据(修正为合法JSON格式)

[
  {
    "code": "A",
    "name": "php",
    "desc": "language",
    "order": 2
  },
  {
    "code": "A",
    "name": "javascript",
    "desc": "language",
    "order": 1
  }
]

调用示例

const input = [
  { code: "A", name: "php", desc: "language", order: 2 },
  { code: "A", name: "javascript", desc: "language", order: 1 }
];

console.log(processOrders(input));

输出结果

[
  {
    "code": "A",
    "selectedList": [
      {
        "name": "javascript",
        "desc": "language"
      },
      {
        "name": "php",
        "desc": "language"
      }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:24:56