Javascript的数组sort多属性排序

61 阅读1分钟

需求

一个值班的列表,是对象数据,示例如下:

[
    { user: "张三", seg: "晚上", role: "领导" },
    { user: "李四", seg: "白天", role: "科室" },
    ...
]

其中,seg表示值班的时间段,role表示值班角色,user是值班人姓名

要求:先按值班角色排序,再按值班时间段排序

值班时间段、值班角色如下:

const rolesBy=['领导','科室','值班员','驾驶员','接待领导','接待人员']  // 值班角色
const segsBy=['全天','白天','上午','下午','晚上']  // 值班时间段

实现

比较函数如下

const sortFunc = (x,y) => { 
    if(x.role==y.role) {
        return segsBy.indexOf(x.seg)-segsBy.indexOf(y.seg) 
    } 
    return rolesBy.indexOf(x.role)-rolesBy.indexOf(y.role) 
}

参考