我有一个包含两个属性的对象数组:Name 和 Hours。
例如:
array = [
{name: "ANDY", hours: 40 },
{name: "ANDY", hours: 50 },
{name: "GREG", hours: 40 },
]
例如,在我的数组中,我希望排序结果首先是工作时间最多的安迪,然后是工作时间稍短的安迪,然后是格雷格,因为他的名字按字母顺序排在后面,依此类推。
由于 array.sort() 函数传递数组的两个元素进行比较,我意识到这不是适合我的方法,但未能提出一个优雅的解决方案。请帮帮我。
最佳答案
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)
如果 javascript 有一个 spaceship operator那会更优雅。请注意,此代码很容易扩展以使用更多属性:
ary.sort(function(a, b) {
return cmp(a.name, b.name) || cmp(a.age, b.age) || cmp(b.hours, a.hours) || ....
})
关于javascript - 对 JS 数组进行分组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16164078/