javascript - 如何在 Javascript 中先按姓氏,然后按名字和中间名对姓名数组进行排序

标签 javascript arrays sorting

我有一组名称,我想首先按 last name 排序然后通过first name最后通过middle namemiddle name可能超过1 。例如,如果我有一个包含以下名称的数组:

["James Morrison", "Billy Z Joel", "Billy Joel", "Billy A Joel"]

我如何将其排序为:

["Billy Joel", "Billy A Joel", "Billy Z Joel", "James Morrison"]

最佳答案

一种解决方案是使用String.match()使用正则表达式将 Array.sort() 内的姓氏其他姓名分开。然后你可以使用String.localeCompare()首先比较姓氏,如果相等,则比较其他名字。请注意,在这种方法中,数组中的每个元素至少需要一个名字和一个姓氏,否则它将不起作用。另外,方法Array.slice()仅用于不改变(更改)原始数组的目的,但如果您不介意的话可以丢弃它。

const names = ["James Morrison","Billy Z Joel","Billy Joel","Billy A Joel", "James Junior Joseph Morrison"];

let res = names.slice().sort((a, b) =>
{
    let [aNames, aSurname] = a.match((/(.*)\s(\w+)$/)).slice(1);
    let [bNames, bSurname] = b.match((/(.*)\s(\w+)$/)).slice(1);

    if (aSurname.localeCompare(bSurname))
        return aSurname.localeCompare(bSurname);
    else
        return aNames.localeCompare(bNames);
});

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

关于javascript - 如何在 Javascript 中先按姓氏,然后按名字和中间名对姓名数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084090/

相关文章:

php - 将查询中的数据插入数组

数组中值的 C++ 实例? (直方图)

mysql - SQL 查询多个表,具有多个联接和带有逗号分隔列表的列字段

java - JTable 排序不显示图像

sorting - 交叉表列组排序

java - 读取 Servlet 中的嵌套名称-值对

javascript - 更改显示属性会使不透明度过渡无效

c# - 如何对具有图像的 GridView 列进行排序

Javascript:更改表格单元格的 bgColor

javascript - 右滑 react native 删除列表项