Mozilla Firefox 中的 JavaScript 排序函数输出与 Google Chrome 中不同

标签 javascript google-chrome sorting firefox javascript-objects

我有一个 JavaScript 对象数组,如下所示。

players = [{"player": "CR7", "status": false, "fullname": "Cristiano Ronaldo"},
 {"player": "NJR11", "status": false, "fullname": "Neymar Jr."},
 {"player": "SC11", "status": false, "fullname": "Sunil Chhetri"},
 {"player": "LM10", "status": true, "fullname": "Lionel Messi"},
 {"player": "SG19", "status": false, "fullname": "Sergio Aguero"}
];

我还使用下面的方法对数组进行排序。我的预期结果是状态为 true 的对象应该排在第一位,其余对象保持顺序。

players.sort((p) => (p.status) ? -1 : 1);

它在 Google Chrome 中运行良好,如下所示。

         [{"player":"LM10","status":true,"fullname":"Lionel Messi"},
          {"player":"CR7","status":false,"fullname":"Cristiano Ronaldo"},
          {"player":"NJR11","status":false,"fullname":"Neymar Jr."},
          {"player":"SC11","status":false,"fullname":"Sunil Chhetri"},
          {"player":"SG19","status":false,"fullname":"Sergio Aguero"}
         ]

但是在 Mozilla Firefox 和 Android 默认浏览器中,它如下所示,这不是我想要的。

        [{"player":"LM10","status":true,"fullname":"Lionel Messi"},
         {"player":"SG19","status":false,"fullname":"Sergio Aguero"},
         {"player":"SC11","status":false,"fullname":"Sunil Chhetri"},
         {"player":"NJR11","status":false,"fullname":"Neymar Jr."},
         {"player":"CR7","status":false,"fullname":"Cristiano Ronaldo"}
         ]

为什么它在 Firefox 中的行为有所不同?像 Chrome 一样工作的解决方案是什么?

最佳答案

你基本上是在打乱数组。它会随机地按照您期望的 Chrome 排序方式偶然。你的排序根本不起作用。 sort 毕竟需要两个元素,您必须对其进行比较:

players.sort((a, b) => b.status - a.status);

这是以下内容的缩写形式:

players.sort((a, b) => {
  if(a.status === b.status) return 0; // order doesnt matter
  if(a.status) return -1; // only a has status, comes first
  if(b.status) return 1 // only b has status, comes first
});

或者:

 players = [...players.filter(it => it.status), ...players.filter(it => !it.status)];

可能更快,具体取决于引擎使用的排序算法。

关于Mozilla Firefox 中的 JavaScript 排序函数输出与 Google Chrome 中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503856/

相关文章:

php - 根据 PHP 变量的值调用 JavaScript 函数

html - React 不会关闭自动完成功能

javascript - 基于Javascript中的多个条件对数组进行排序

javascript - 在javascript中自然排序包含数字,字母和日期和时间的字符串

list - Kotlin - 基于对象属性对 MutableList 进行排序

javascript - 在页面加载时弹出显示,然后在我一定时间后消失

javascript - 类内的方法在单元测试中未执行

javascript - AudioBufferSourceNode.start()不起作用,或至少激活但不产生任何声音,我在做错什么吗?

javascript - 使用 chrome 扩展程序进行查询并获取源代码

css - @media 查询不适用于移动设备。在 Chrome 中运行良好