我有一组名称,我想首先按 last name
排序然后通过first name
最后通过middle name
。 middle 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/