【发布时间】:2010-10-05 00:48:54
【问题描述】:
我想这取决于它是如何实现的。如果有人回来告诉我“是的,在几乎所有浏览器中,只有在需要满足排序条件时才会更改项目顺序。
【问题讨论】:
标签: javascript sorting cross-browser
我想这取决于它是如何实现的。如果有人回来告诉我“是的,在几乎所有浏览器中,只有在需要满足排序条件时才会更改项目顺序。
【问题讨论】:
标签: javascript sorting cross-browser
您正在寻找的是算法是否“稳定”。众所周知,Firefox 不是,而 IE 是。 javascript 标准不需要稳定的排序算法。
编辑:Firefox 3+ 有一个稳定的排序。请看http://www.hedgerwow.com/360/dhtml/js_array_stable_sort.html
【讨论】:
每个浏览器都有不同的实现,所以不要指望它。
【讨论】:
我相信这取决于您在数组中排序的对象类型。您可以向 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的格式
【讨论】:
所有主流浏览器都有稳定的排序算法,而且(因为那里有一些愚蠢的代码)它们可以处理不一致的比较函数。
【讨论】: