【问题标题】:will Array.sort() preserve the order of the array, where possible?Array.sort() 会在可能的情况下保留数组的顺序吗?
【发布时间】:2010-10-05 00:48:54
【问题描述】:

我想这取决于它是如何实现的。如果有人回来告诉我“是的,在几乎所有浏览器中,只有在需要满足排序条件时才会更改项目顺序。

【问题讨论】:

    标签: javascript sorting cross-browser


    【解决方案1】:

    您正在寻找的是算法是否“稳定”。众所周知,Firefox 不是,而 IE 是。 javascript 标准不需要稳定的排序算法。

    编辑:Firefox 3+ 有一个稳定的排序。请看http://www.hedgerwow.com/360/dhtml/js_array_stable_sort.html

    【讨论】:

      【解决方案2】:

      每个浏览器都有不同的实现,所以不要指望它。

      【讨论】:

        【解决方案3】:

        我相信这取决于您在数组中排序的对象类型。您可以向 array.sort() 提供“排序函数”来确定对特定对象进行排序的规则。例如,考虑函数:

        function sortInt(a, b){
           if ( a < b )
            return -1;
           else if ( a == b )
             return 0;
           else if ( a > b )
             return 1;
        }
        

        所以这显然是人为的,但您可以将这种相同类型的想法应用于任何“可比较”的对象。您将始终返回 -1、0 或 1,具体取决于 a 是否小于、等于或大于 b(恭敬地)。

        然后你会说:array.sort(sortInt);

        警告:

        如果语法不完美,请原谅我,因为我手头没有示例。从跨浏览器的角度来看,我也不确定 Array.sort() 的稳定性。

        编辑:修正了伪代码sn-p的格式

        【讨论】:

        • 函数 sortInt(a,b) { return (a>b) - (a
        • 这不会“保留”评估结果为 0 的数组的顺序。即当所有评估结果为 0 时,数组 [ a, b, c, d ] 不会导致相同顺序的数组(至少在 Chrome 26 上)
        【解决方案4】:

        所有主流浏览器都有稳定的排序算法,而且(因为那里有一些愚蠢的代码)它们可以处理不一致的比较函数。

        【讨论】:

          猜你喜欢
          • 2015-06-08
          • 1970-01-01
          • 2020-08-30
          • 1970-01-01
          • 1970-01-01
          • 2013-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多