如何保留原有排序逻辑并指定特定XI_MP_DESC值置顶?
实现指定字段置顶的多条件排序
问题描述
现有一组表格数据,原本通过两次排序实现先按XI_MP_POS排序,再按XI_MP_DESC字母序排序的逻辑,代码如下:
inventoryData = Object.values(inventoryData).sort((a, b) => { if (a.XI_MP_POS < b.XI_MP_POS) { return -1; } if (a.XI_MP_POS > b.XI_MP_POS) { return 1; } return 0; }); inventoryData = Object.values(inventoryData).sort((a, b) => { if (a.XI_MP_DESC < b.XI_MP_DESC) { return -1; } if (a.XI_MP_DESC > b.XI_MP_DESC) { return 1; } return 0; });
现在需要保留原有排序逻辑的基础上,让指定的XI_MP_DESC值无视字母顺序始终显示在顶部。例如将原表格:
| Desc | POS |
|---|---|
| A | A |
| A | B |
| A | C |
| B | A |
| C | A |
| C | B |
| C | C |
转换为:
| Desc | POS |
|---|---|
| C | A |
| C | B |
| C | C |
| A | A |
| A | B |
| A | C |
| B | A |
即指定C始终显示在顶部。
解决方案
通过新增一次排序逻辑识别并置顶指定的XI_MP_DESC值,完整代码如下:
// 定义需要置顶的Desc值数组,可根据实际需求修改 const topDescriptions = ['C']; // 原有排序逻辑:先按POS排序,再按Desc字母序排序 inventoryData = Object.values(inventoryData).sort((a, b) => { if (a.XI_MP_POS < b.XI_MP_POS) { return -1; } if (a.XI_MP_POS > b.XI_MP_POS) { return 1; } return 0; }); inventoryData = Object.values(inventoryData).sort((a, b) => { if (a.XI_MP_DESC < b.XI_MP_DESC) { return -1; } if (a.XI_MP_DESC > b.XI_MP_DESC) { return 1; } return 0; }); // 新增置顶排序逻辑 inventoryData = Object.values(inventoryData).sort((a, b) => { const aIsTop = topDescriptions.includes(a.XI_MP_DESC); const bIsTop = topDescriptions.includes(b.XI_MP_DESC); // 若a是置顶项、b不是,a排前面 if (aIsTop && !bIsTop) return -1; // 若b是置顶项、a不是,b排前面 if (bIsTop && !aIsTop) return 1; // 都不是或都是置顶项,保持原有排序 return 0; });
性能优化建议
可以将三次排序合并为一次,减少排序次数提升执行效率,合并后的代码如下:
const topDescriptions = ['C']; inventoryData = Object.values(inventoryData).sort((a, b) => { // 第一步:优先判断置顶项 const aIsTop = topDescriptions.includes(a.XI_MP_DESC); const bIsTop = topDescriptions.includes(b.XI_MP_DESC); if (aIsTop && !bIsTop) return -1; if (bIsTop && !aIsTop) return 1; // 第二步:按XI_MP_DESC字母序排序 if (a.XI_MP_DESC !== b.XI_MP_DESC) { return a.XI_MP_DESC < b.XI_MP_DESC ? -1 : 1; } // 第三步:按XI_MP_POS排序 return a.XI_MP_POS < b.XI_MP_POS ? -1 : 1; });
内容的提问来源于stack exchange,提问作者ClarkDarbler
相关产品推荐
相关产品推荐

