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

如何保留原有排序逻辑并指定特定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值无视字母顺序始终显示在顶部。例如将原表格:

DescPOS
AA
AB
AC
BA
CA
CB
CC

转换为:

DescPOS
CA
CB
CC
AA
AB
AC
BA

即指定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:20:27