在JS数组上分组排序

Raf*_*ski 4 javascript

我有一组具有两个属性的对象:名称和小时.

例如:

array = [
    {name: "ANDY", hours: 40 }, 
    {name: "ANDY", hours: 50 }, 
    {name: "GREG", hours: 40 },
]
Run Code Online (Sandbox Code Playgroud)

例如,在我的数组中,我希望排序的结果是Andy的小时数最多,Andy的小时数稍长,然后是Greg,因为他的名字后来按字母顺序排列,依此类推.

由于array.sort()函数传递数组的两个元素进行比较,我意识到这不是我的方法,但未能提出一个优雅的解决方案.请帮帮我.

geo*_*org 12

array = [
    {name: "ANDY", hours: 40 }, 
    {name: "GREG", hours: 40 },
    {name: "ANDY", hours: 50 }, 
]

function cmp(x, y) {
  return x > y ? 1 : (x < y ? -1 : 0);
}


array.sort(function(a, b) {
  return cmp(a.name, b.name) || cmp(b.hours, a.hours)
})

console.log(array)
Run Code Online (Sandbox Code Playgroud)

如果javascript有一个太空船运营商会更优雅.请注意,此代码很容易扩展以使用更多属性:

ary.sort(function(a, b) {
    return cmp(a.name, b.name) || cmp(a.age, b.age) || cmp(b.hours, a.hours) || ....
})
Run Code Online (Sandbox Code Playgroud)