javascript - 为什么 Array.prototype.sort 在 Chrome 中有不同的行为?
问题描述
我试图对数组进行排序,我在Chrome V79中得到了与Firefox Dev Edition V72不同的行为(都在桌面版中)。
这是测试,
console.log([4, 2, 5, 1, 3].sort((a, b) => a>b));
console.log(Array.prototype.sort.call([4, 2, 5, 1, 3], (a, b) => a>b));
在 Firefox Dev 中,我得到了这个结果,
但是在 Chrome 中,为什么我会得到这个结果,
但是当我用 var 传递相同的数组时,我得到了这个,
但是是的,它对数组进行排序并重写变量,但返回数组的未排序版本。所以,当我在没有任何 var 的情况下直接传递数组时,我没有排序。但,
根据MDN 的参考页面,它不应该返回排序后的数组吗?
为什么有区别??
注意:在 Example Imgs 中,有两个我正在练习
call
func 的示例。并忘记删除它。所以,直接忽略吧。他们俩都是一样的。
解决方案
正如评论中所指出的,您提供的排序功能应该返回:
- 如果
a
大于则为正数b
b
如果大于则为负数a
- 0 如果它们相等
因此,您可以返回一个简单的表达式,a - b
而不是a > b
(如果您想升序排序):
console.log([4, 2, 5, 1, 3].sort((a, b) => a-b));
推荐阅读
- javascript - 从 for-loop 简单的回调辅助函数返回值
- ios - 如何使用 iOS 的网络框架接收 UDP 组播和单播
- python - 将具有一个唯一值的重复行重新组织为列
- azure-data-explorer - Kusto:将结果集中的每一行与另一个表进行比较
- influxdb - 如何在 FLUX InfluxDB 2.0 中从 5 m bar 获取 10 m 的时间序列数据
- python - 使用 NodeJS 的加密与使用 Python (cryptography.fernet) 的加密不匹配
- angular - 如何在我的 Angular Material 主题中加入排版?
- java - 为什么 JNI 的 `FindClass` 方法有奇怪的副作用?
- ios - 将 CMSampleBuffer 转换为 m3u8 并将其保存到路径?
- r - 为饼图添加百分比 (%)