Array.sort()会尽可能保留数组的顺序吗?

时间:2009-02-02 21:18:50

标签: javascript sorting cross-browser

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为这取决于您在数组中排序的对象类型。您可以为array.sort()提供“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()的稳定性。

修改:修正了伪造的代码段

的格式

答案 3 :(得分:0)

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