ECMA 脚本规范对数组的算法和稳定性仍然不可知.sort() 方法。然而,最近的更新和发现揭示了此方法在各种浏览器中的行为。
从 ES2019 开始,排序方法是现在需要在出现重复值时保持元素顺序。这意味着 Array.sort() 在支持 ES2019 及更高版本的浏览器中保证稳定。
ES2019 之前,稳定性Array.sort() 取决于浏览器:
在某些版本的 V8(Chrome 和 Node.js 使用的 JavaScript 引擎)中,排序算法可能会根据大小从稳定切换到不稳定数组的。为了演示此行为,请考虑以下测试用例:
<code class="javascript">function Pair(_x, _y) { this.x = _x; this.y = _y; } function pairSort(a, b) { return a.x - b.x; } var y = 0; var check = []; while (check.length < 100) { check.push(new Pair(Math.floor(Math.random() * 3) + 1, ++y)); } check.sort(pairSort);</code>
此代码模拟具有随机 x 坐标和递增 y 坐标的对数组。稳定的排序将保持具有相同 x 坐标的元素的顺序(在这种情况下,y 坐标应该是连续的)。但是,某些浏览器(尤其是早期版本的 Chrome)在对较大数组进行排序时可能会表现出不稳定。
以上是Array.sort() 在不同浏览器中稳定吗?的详细内容。更多信息请关注PHP中文网其他相关文章!