javascript - 对 JS 数组进行分组排序

标签 javascript

我有一个包含两个属性的对象数组: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/

相关文章:

javascript - 使用 ng-maxlength 时不会触发 $watch 监听器

javascript - 如何将maya 3D模型包含到三个js中?

javascript - 将对象数组中的值插入到一组元素中

javascript - 解析 Peg.JS 中的段落

javascript - getElementsByName ('q' )[0] 返回未定义

javascript - 检查 node.js 中的实际文件类型

javascript - 将选中的属性赋予循环内的单选按钮

javascript - 如何使用处理器动态删除/编辑 Extjs View 中的属性

javascript修改字符串数组的子索引

javascript - jQuery 找到第一个有 child 的 parent