javascript sort函数中的相同项会发生什么

时间:2017-12-28 14:25:43

标签: javascript arrays sorting

我想知道Javascript排序函数对相同项目的作用(例如,排序的是相同项目的顺序是什么?)

示例:如果我有一个对象数组,每个对象都具有以下结构

{
    name:string,
    type:string
}

我想使用sort函数对上面的数组进行排序,使列表为:

  1. 首先按类型按升序排序(提供特定的排序功能)
  2. 具有相同类型的项目将按名称按升序排序
  3. 示例:

    排序前

    [{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"}]
    

    我提出的似乎工作的解决方案(基于特定结果)是:

    1. 按名称对整个列表进行排序(因为排序函数使用就地算法,原始列表将在此后按名称排序)
    2. 按类型
    3. 对整个列表进行排序

      这意味着排序函数似乎以保持相等项目的原始顺序(例如,第二种排序使项目与原始顺序中的“type2”相同,这是顺序按名称排序的列表)

      但我无法找到支持我的理论的文件。

      我的问题是:对于所有情况和不同浏览器,此行为(sort函数是否保留相等项的原始顺序)是真的吗?

      我很感激任何证实这种行为的文件。

1 个答案:

答案 0 :(得分:2)

要按两个键排序,您只需要通过uiautomatorviewer一次。在比较功能中,您只需要在主键相同时比较辅助键:

.sort()

如果类型的比较(通过yourArray.sort(function(o1, o2) { var c = o1.type.localeCompare(o2.type); if (c) return c; return o1.name.localeCompare(o2.name); }); )返回1或-1,则返回该值以用于对对象进行排序。如果类型相同,则比较将移至名称。