栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

从ES2019开始,

sort
要求保持稳定。从ES2018到ECMAscript 1st Edition,它被允许不稳定。

简单的测试用例忽略标题,如果引擎的排序是稳定的,第二组数字应该是连续的。注意:此测试用例不适用于某些版本的Chrome(从技术上来说是V8),该版本基于数组的大小切换排序算法,对小型数组使用稳定的排序,对较大数组使用不稳定的排序。详细信息。)请参阅问题结尾,以获取使数组足够大以触发行为的修改版本。

IE的排序一直稳定,只要我曾经使用过(即IE6)。再次检查IE8,看来仍然如此。

尽管您链接到的Mozilla页面说的是Firefox的排序是稳定的,但我肯定会说,在Firefox 2.0(包括Firefox
2.0)之前,情况并非总是如此。

一些粗略的结果:

  • IE6 +: 稳定
  • Firefox <3:不稳定
  • Firefox> = 3: 稳定
  • 铬<70:不稳定
  • Chrome> = 70: 稳定
  • Opera <10:不稳定
  • Opera> = 10: 稳定
  • Safari 4: 稳定
  • 边缘:对于长数组> 512个元素)不稳定

Windows上的所有测试。

另请参阅:

这个测试用例(从此处进行修改)将通过确保数组具有足够的条目来选择“更有效”的排序方法来演示V8(例如Node
v6,Chrome <v70)中的问题;这是在考虑非常老的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);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};    }}if (!issues) {    console.log("Sort appears to be stable");}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号