javascript - 使用 .sort((a,b) => a>b) 对数组进行排序有效。为什么?
问题描述
[9,2,1,80].sort((a,b) => a>b)
// gives [ 1, 2, 9, 80 ]
[9,2,1,80].sort((a,b) => a<b)
// gives [ 80, 9, 2, 1 ]
为什么?我有一些使用上述比较功能的代码。数字的比较函数应该类似于 (a,b) => ab。为什么上面的代码是正确的,如果是的话?
解决方案
它有时会起作用 - 取决于您的浏览器和输入数组 - 因为 sort 需要正数、0 或负数作为返回值。表达式a>b
ora<b
返回一个转换为 0 或 1 的布尔值。0 表示它相等,因此这是浏览器的特定实现 - 它如何处理这些相等值 - 您正在使用的地方。
https://www.w3schools.com/jsref/jsref_sort.asp
您还可以通过阅读ECMAScript 规范(这是 Javascript 的基础)来判断相等的值不稳定:
排序不一定是稳定的(也就是说,比较相等的元素不一定保持原来的顺序)。[...] 如果 comparefn 不是未定义的并且不是该数组元素的一致比较函数(见下文),则排序顺序是实现定义的。
推荐阅读
- r - R - 用格子线框绘制网格
- python - 通过 Z3 中的 Constraints 将常量值传递给函数
- ruby-on-rails - 一个查询中的多个连续组Mongodb
- android - E/SQLiteLog: (1) “All”附近:语法错误
- c - 将文件中的内容添加到链表
- python - 如何让 Flask-Login 将用户名作为参数传递给模型中的 load_user 回调而不是 id?
- python - 同时使用 pytest 和 tf.test.TestCase 的问题
- apache-nifi - Apache Nifi PutFTP 更改文件扩展名
- python-3.x - 训练机器学习模型不分类错误输入或空输入
- vue.js - Bootstrap Vue - 将卡片数据作为有效负载传递