理想是火,点燃熄灭的灯。
在 JavaScript 中使用 .sort()
方法时,如果两个值“相同”,也就是 比较函数返回 0
,那么它们在排序后的位置是:
排序算法决定的,不保证原顺序,也就是说,它们可能调换位置,也可能不动。
.sort()
是不稳定排序算法(在老浏览器或旧规范中),即:“相等元素的相对顺序不一定保持不变”。
“如果两个元素相等,它们的原始顺序会被保留”。
const arr = [ { name: 'apple', value: 2 }, { name: 'banana', value: 1 }, { name: 'cherry', value: 2 } ]; arr.sort((a, b) => a.value - b.value); console.log(arr);
可能结果(现代浏览器中):
[ { name: 'banana', value: 1 }, { name: 'apple', value: 2 }, // 原顺序保留 ✅ { name: 'cherry', value: 2 } ]
但如果排序算法是不稳定的,有可能会变成:
[ { name: 'banana', value: 1 }, { name: 'cherry', value: 2 }, { name: 'apple', value: 2 } ]
稳定排序的定义:
如果a
和b
相等,并且a
在b
前面,那么排序之后a
仍然在b
前面。
不稳定排序就可能交换相等元素的位置。
a=1 b=2 c=1
不稳定排序:
可能是a= 1 c= 1 b=2
也可能是c= 1 a=1 b=2
稳定排序:
a= 1 c= 1 b=2
作者: Bill 本文地址: http://biaoblog.cn/info?id=1747708826039
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!