我有一个基于Angular5的前端,需要显示一个人员列表。后端应用程序中显示了类似的列表。两个列表需要完全相同的排序。后端列表是通过MSSQL DB中的查询获取的,该查询使用'命令。像这样的条款:
select * from PERSON where GROUP=1 order by PERSON.LAST_NAME ASC, PERSON.INITIALS ASC, PERSON.PREFIX ASC, PERSON.FIRSTNAME ASC
在前端,我的人模型看起来像:
export interface Person {
id?: number;
fullName?: string;
}
此处的fullName符合以下格式:[LastName,Initials Prefix FirstName]例如:Adams,Mr John John。
我正在使用此方法对其进行排序:
public sortByName(aPersonArr: Person[]) {
aPersonArr.sort((p1, p2) => {
let name1 = p1.fullName;
let name2 = p2.fullName;
// If both names are blank, consider them equal, If one name is blank, place it at the last
if (!name1 && !name2) {
return 0;
} else if (name1 && !name2) {
return -1;
} else if (name2 && !name1) {
return 1;
}
name1 = name1.toLowerCase();
name2 = name2.toLowerCase();
if (name1 < name2) {
return -1;
}
if (name1 > name2) {
return 1;
}
return 0;
});
}
}
但是当一个人的fullName以一个特殊字符开头时会出现问题,因为SQL Query按此顺序获取名称:(此处仅显示lastNames)
*Account
,Adams
.Alkin
+Account
-Adams
尽管我的打字稿代码按如下方式对它们进行排序:(此处仅显示lastNames)
*Account
+Account
,Adams
-Adams
.Alkin
我需要在前端使用此逻辑的原因是我的人员列表很多次都是动态准备的,需要立即进行排序。有没有办法知道SQL查询使用什么确切的逻辑来比较字符串,以便我可以在我的排序方法中使用相同的。