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

JavaScript数组按text排序时如何固定id为-1、0的元素始终置顶

JS数组指定元素固定置顶+剩余元素按字段排序实现

你可以在sort比较函数里先区分置顶元素和普通元素,分层判断排序规则即可,完整代码如下:

const d = [
    { id: 20, text: 'deaf' },
    { id: 30, text: 'acta' },
    { id: 0, text: 'deema1' },
    { id: -1, text: 'deema2' },
];

// 配置需要固定置顶的id
const pinnedIds = new Set([-1, 0]);

d.sort((a, b) => {
    const isAPinned = pinnedIds.has(a.id);
    const isBPinned = pinnedIds.has(b.id);

    // 置顶元素优先级高于普通元素
    if (isAPinned && !isBPinned) return -1;
    if (!isAPinned && isBPinned) return 1;

    // 两个都是置顶元素:按id升序排列,保证-1在0前面
    if (isAPinned && isBPinned) return a.id - b.id;

    // 两个都是普通元素:按text字段排序
    return a.text.localeCompare(b.text);
})

console.log(d);

运行后输出的结果和预期完全一致:

[
    { id: -1, text: 'deema2' },
    { id: 0, text: 'deema1' },
    { id: 30, text: 'acta' },
    { id: 20, text: 'deaf' },
]
  • 逻辑说明:
    • 优先判断元素是否属于置顶分组,置顶组元素永远排在非置顶组前面
    • 同组元素再按对应规则排序:置顶组按id升序,普通组按text字段做本地化比较排序
    • 如果后续需要调整置顶元素,直接修改pinnedIds集合即可,不需要改动核心排序逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:12:28