У меня есть интерфейс на основе Angular5, который должен показать список людей.Подобный список показан в фоновом приложении.Оба списка должны быть отсортированы одинаково.Внутренний список выбирается с помощью запроса в MSSQL DB, который использует предложение 'order by', например, так:
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;
}
Полное имя здесь в соответствии с этим форматом: [Фамилия, Инициал Префикс Фамилия], например: Адамс, мистер Джон.
Я использую этот метод для сортировки:
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;
});
}
}
Но проблема возникает, когда полное имя человека начинается со специального символа, потому что SQL-запрос выбирает имена в следующем порядке: (Здесь отображаются только последние имена)
*Account
,Adams
.Alkin
+Account
-Adams
В то время как мой машинописный код сортирует их следующим образом: (Показанытолько последние имена здесь)
*Account
+Account
,Adams
-Adams
.Alkin
Причина, по которой мне нужна эта логика на внешнем интерфейсе, заключается в том, что мой личный список много раз динамически готовился и должен быть отсортирован сразу.Есть ли способ узнать, какая именно логика используется SQL-запросом для сравнения строк, чтобы я мог использовать то же самое в моем методе сортировки.