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

JavaScript自定义compare函数在Chrome与Firefox中排序结果不一致

问题原因
  • 返回值逻辑倒置
    Array.sort的比较函数规则为:返回负数则a排在b前,返回正数则b排在a前,返回0则二者相对顺序不变。你当前的else分支中return a.active ? 1 : -1的逻辑完全倒置:当a是active状态、b为非active状态时,返回1会把a排到b后面,和你要求的「active元素排在前面」的需求完全相反。Chrome中表现符合预期属于底层排序算法实现的巧合,逻辑本身就存在错误,Firefox的严格排序逻辑直接暴露了这个问题。
  • 未覆盖双非active的排序场景
    你只处理了两个元素都为active的情况,当两个元素active都为false时,没有编写按name排序的逻辑,会导致非active分组内的排序不符合预期。
修复后的代码
let compare = (a, b) => {
    // 第一层优先比较active状态
    if (a.active !== b.active) {
        return a.active ? -1 : 1;
    }
    // 第二层active状态相同则按name升序排序
    const Aname = a.name.toUpperCase();
    const Bname = b.name.toUpperCase();
    return Aname > Bname ? 1 : Aname < Bname ? -1 : 0;
};
验证说明

修复后的代码在所有符合ES规范的浏览器中都能实现预期效果:

  1. 所有active为true的元素排在列表前半部分,按name升序排列
  2. 所有active为false的元素排在列表后半部分,按name升序排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:05