Я хотел бы реализовать функцию сортировки для массива команд, где команды должны быть отсортированы по подстроке имени команды, а затем отсортированы по группам.Например, массив может выглядеть следующим образом:
["Project Team This", "Support Team Other", Project Team Another", "Project Directors", "Support Directors", "Project Team Other", "Support Team That"]
Я бы хотел отсортировать их там, где группы «Директора» находятся первыми, группы «Проект» - вторыми, а группы «Поддержка» - третьими, но затемможет быть отсортировано по алфавиту в этих группах.Кроме того, я бы сначала хотел, чтобы директора проектов, так что результат будет:
Project Directors,
Support Directors,
Project Team Another,
Project Team Other,
Project Team This,
Support Team Other,
Support Team That,
По сути, порядок:
- Директора проектов
- Все, что угодноеще с " директорами " в нем
- Что-нибудь с " проектом в нем
- Что-нибудь с" поддержкой"в нем
Я думал, что какой-то вид вставки мог бы пойти? Как бы вы это реализовали?
Любые предложения, которые вы высоко оценили.
Большое спасибо.
Обновление 1: Я попробовал функцию сравнения для стандартной сортировки следующим образом. Я думаю, что мне, вероятно, нужно сначала разбить их на отдельные группы, чтобы отсортировать их в алфавитном порядке, как предлагаетАдам.
function teamSort(a, b) {
left = a.toLowerCase();
right = b.toLowerCase();
if (left.includes('project directors')) {
return -1;
}
if (right.includes('project directors')) {
return 1;
}
if (left.includes('project team')) {
return -1;
}
if (right.includes('project team')) {
return 1;
}
return 0;
}
Обновление 2 : По предложению Адама, на этот раз они разбиваются на отдельные массивы, сортируются и затем объединяются.
function teamSort2(teams) {
let supportTeams = teams.filter(t => {
return t.toLowerCase().includes('support');
});
let projectTeams = teams.filter(t => {
return t.toLowerCase().includes('project team');
});
let projectDirectors = teams.filter(t => {
return t.toLowerCase().includes('project directors');
});
let otherDirectors = teams.filter(t => {
return t.toLowerCase().includes('directors') && !t.toLowerCase().includes('project directors');
});
supportTeams.sort();
projectTeams.sort();
otherDirectors.sort();
return projectDirectors.concat(otherDirectors, projectTeams, supportTeams);
}
Лучшеспособы сделать это?