如何按自定义序列对分组数据的categoryName及内部group排序?
解决方案
1. 定义排序规则映射
先把预期的排序顺序转换成键值对映射,方便快速获取排序优先级:
// 分类排序规则:key为categoryName,value为排序权重 const categoryOrderMap = { 'Personalisation': 1, 'Notifications': 2, 'Orders': 3 }; // Orders分类下的group排序规则 const ordersGroupOrderMap = { 'Group A': 1, 'Group b': 2, 'Group c': 3 };
2. 用Lodash完成双层排序
先对外层分类按规则排序,再单独处理Orders分类下的group顺序:
// 假设原始数据存储在originalData变量中 const originalData = [/* 你的原始JSON数组 */]; // 第一步:按预期顺序排序分类 const sortedCategories = _.orderBy(originalData, [item => categoryOrderMap[item.categoryName]], ['asc']); // 第二步:处理Orders分类下的group排序 const finalData = _.map(sortedCategories, category => { if (category.categoryName === 'Orders') { return { ...category, groups: _.orderBy(category.groups, [group => ordersGroupOrderMap[group.name]], ['asc']) }; } return category; });
3. 逻辑说明
- 用映射表定义排序规则,后续调整顺序只需修改映射表,无需改动核心排序逻辑
_.orderBy支持通过自定义函数返回的权重值排序,完美匹配自定义排序需求- 仅针对Orders分类做group排序,不影响其他分类的原有结构
内容的提问来源于stack exchange,提问作者PixelCoder
相关产品推荐
相关产品推荐

