繁体   English   中英

Javascript 比较功能在 Firefox 和 Chrome 之间的行为不同

[英]Javascript compare function behaving differently between Firefox and Chrome

我确定我只是在这里遗漏了一些简单的逻辑,这让我发疯。

我在 Chrome v95.0.4638.69 和 Firefox v93.0 中工作

我有一个对象数组,其中的数据如下所示: [ {id:1, name:"Jake", active:true}, {id:2, name:"Sam", active:false} ]

我的比较函数如下所示:

let compare = (a, b) => {
    const Aname = a.name.toUpperCase();
    const Bname = b.name.toUpperCase();
    if (a.active && b.active) {
        return Aname > Bname ? 1 : Aname < Bname ? -1 : 0;
    }
    else {
        return a.active ? 1 : -1;
    }
};

我想要做的是所有具有 active:true 的对象应该首先按字母顺序排序名称,然后是按字母顺序排序的 active:false 对象。 在 Chrome 中,它正是这样做的。 在 Firefox 中,active = false 的对象位于列表的顶部。 我犯了什么愚蠢的错误?

  1. 当两个对象的活动设置为相同值时,您应该按名称排序。
  2. 当按active属性排序时,如果第一个对象的属性设置为true以在属性设置为false的对象之前对其进行排序,则应返回-1
  3. 即使在else分支中两个对象应该被视为相等,您也不会返回0
let compare = (a, b) => {
    const Aname = a.name.toUpperCase();
    const Bname = b.name.toUpperCase();
    if (a.active === b.active) {
        return Aname > Bname ? 1 : Aname < Bname ? -1 : 0;
    }
    else {
        return a.active ? -1 : b.active ? 1: 0;
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM