我有一个 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/