求助:修正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
相关产品推荐
相关产品推荐

