首页 > web前端 > js教程 > Array.sort() 在不同浏览器中稳定吗?

Array.sort() 在不同浏览器中稳定吗?

Linda Hamilton
发布: 2024-11-02 13:38:30
原创
312 人浏览过

Is Array.sort() stable across different browsers?

Array.sort() 在不同浏览器上的稳定性如何?

Array.sort() 方法的稳定性,判断排序后是否保留相等元素的顺序,不同浏览器有所不同:

截至ES2019,要求排序方法稳定:

这意味着数组中相等的元素在排序后会保持其相对顺序。

ES2019之前,稳定性取决于浏览器:

  • IE 6 :稳定
  • Firefox
  • Firefox 3: 不稳定
  • Firefox >= 3: 稳定
  • Chrome 70:
  • 不稳定
  • Chrome >= 70:
  • 稳定
  • Opera < 10:
  • 不稳定
  • Opera >= 10:
  • 稳定
  • Safari 4:
  • 稳定

Edge: 对于超过 的数组来说不稳定512 个元素

function Pair(_x, _y) {
  this.x = _x;
  this.y = _y;
}
function pairSort(a, b) {
  return a.x - b.x;
}
// Create an array with enough entries to trigger the "more efficient" sort method
var y = 0;
var check = [];
while (check.length < 100) {
  check.push(new Pair(Math.floor(Math.random() * 3) + 1, ++y));
}
check.sort(pairSort);
// Check for instability by comparing the order of equal elements
var min = {};
var issues = 0;
for (var i = 0; i < check.length; ++i) {
  var entry = check[i];
  var found = min[entry.x];
  if (found) {
    if (found.y > entry.y) {
      console.log("Unstable at " + found.i + ": " + found.y + " > " + entry.y);
      ++issues;
    }
  } else {
    min[entry.x] = {x: entry.x, y: entry.y, i: i};
  }
}
// Log stability status
if (!issues) {
  console.log("Sort appears to be stable");
}请注意,某些版本的 Chrome 会根据数组大小在稳定排序和不稳定排序之间切换:

在 Chrome 70 之前,引擎使用稳定排序对小型数组进行排序,对较大数组进行不稳定排序。这可以使用以下测试用例进行验证:此测试将演示以前版本的 Chrome 和其他实现不稳定排序的浏览器的不稳定性。

以上是Array.sort() 在不同浏览器中稳定吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板