我想知道Javascript排序函数对相同项目的作用(例如,排序的是相同项目的顺序是什么?)
示例:如果我有一个对象数组,每个对象都具有以下结构
{
name:string,
type:string
}
我想使用sort函数对上面的数组进行排序,以便列表是:
例:
排序前:
[{name:"John", type:"type3"},{name:"Tim", type:"type2"},{name:"Buck", type: "type2"},{name:"Emma", type:"type2"}]
排序后:
[{name:"Buck", type:"type2"},{name:"Emma", type:"type2"},{name:"Tim", type:"type2"},{name:"John", type:"type3"}]
我提出的解决方案似乎有效(基于特定结果)是:
这意味着sort函数似乎保持了相等项的原始顺序(例如,第二种排序以原始顺序放置具有相同“type2”的项目,这是按名称排序的列表的顺序)
但我找不到文件来支持我的这个理论。
我的问题是:对于所有情况和不同的浏览器,这种行为(sort函数保留了相同项的原始顺序)是真的吗?
我会很感激任何证实这种行为的文件。
要按两个键排序,您只需要通过.sort()
一次。在比较功能中,您只需要在主键相同时比较辅助键:
yourArray.sort(function(o1, o2) {
var c = o1.type.localeCompare(o2.type);
if (c) return c;
return o1.name.localeCompare(o2.name);
});
如果类型的比较(通过.localeCompare()
)返回1或-1,则返回以用于对对象进行排序。如果类型相等,则比较将移至名称。