按自定义字段对对象数组进行排序,然后按字母顺序排序

Daf*_*aft -1 javascript lodash

我有一个对象数组,每个对象都有 2 个值,优先级和名称。

var people = [
        {
            "name" : "Jim",
            "priority" : "Low"
        },
        {
            "name" : "Gary",
            "priority" : "Medium"
        },
        {
            "name" : "Andrew",
            "priority" : "Medium"
        },
        {
            "name" : "Bill",
            "priority" : "High"
        },
        {
            "name" : "Edward",
            "priority" : "Medium"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

我想对这个数组进行排序,按优先级从高到低排序,然后在每个优先级中按名称字母顺序排序。

按字母顺序排序非常简单:

people = _.orderBy(people, 'name');
Run Code Online (Sandbox Code Playgroud)

但是我该如何按照我想要的方式按优先级排序呢?

Nik*_*wal 5

您需要创建一个映射来指定优先级顺序,然后可以使用Array.sort如下所示

let priorityMap = {"High" : 3,"Medium" : 2,"Low" : 1};
let people = [{"name":"Jim","priority":"Low"},{"name":"Gary","priority":"Medium"},{"name":"Andrew","priority":"Medium"},{"name":"Bill","priority":"High"},{"name":"Edward","priority":"Medium"}];
people.sort((a,b) => priorityMap[b.priority] - priorityMap[a.priority] || a.name.localeCompare(b.name));
console.log(people);
Run Code Online (Sandbox Code Playgroud)