You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Array.sort()是否为稳定排序?实例验证疑问

关于Array.sort()的稳定性问题解答

嘿,这俩问题问到点子上了,我来给你讲明白:

1. Array.sort()是否始终保持元素的原始相对顺序?

答案是:从ES2019(ECMAScript 2019)开始,规范要求Array.sort()必须是稳定排序,但在这之前的JavaScript环境里,这个行为是没有被标准强制规定的——不同浏览器/引擎可能有不同的实现,有些是稳定的,有些不是。

所谓“稳定排序”,简单说就是:当两个元素在排序规则下被判定为相等时,它们在原数组里的相对位置会被保留下来。

不过现在咱们日常用的现代浏览器(Chrome、Firefox、Edge等)和Node.js环境,基本都已经支持ES2019及以上的标准了,所以在这些环境里,sort()是稳定的。但如果你的代码需要兼容非常老旧的环境(比如IE11及更早),那就要注意,这种情况下sort()的稳定性是没法保证的。

2. 给定数组排序后,相等元素是否必然保持原顺序?

咱们来看你给出的例子:

let array = [ ['whatever', 3], ['1st', 1], ['2nd', 1] ]
array.sort((a,b) => a[1] - b[1])

在符合ES2019及以上标准的环境里,必然会得到[ [ '1st', 1 ], [ '2nd', 1 ], [ 'whatever', 3 ] ]。原因很简单:['1st',1]和['2nd',1]在排序规则下比较的结果是0(因为1-1=0),属于“相等”的情况,稳定排序会保留它们在原数组中的先后顺序——原数组里['1st',1]在['2nd',1]前面,排序后也会保持这个顺序。

但还是要再提醒一句:如果是在ES2019之前的老旧环境里,这个结果就没法100%保证了,有些旧引擎可能会把这两个元素的顺序打乱。不过现在这种场景已经很少见啦。

内容的提问来源于stack exchange,提问作者d9ngle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:52:21