我想为一组团队实施排序功能,其中要根据团队名称的子字符串对团队进行排序,然后按组进行排序。例如,数组可能如下所示:
["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);
}
有更好的方法吗?
答案 0 :(得分:1)
几乎可以肯定,您不必担心(或实现)特定的排序算法。 Array.sort
函数可以将定义列表顺序的compareFunction
用作参数。只需使用它即可。
(当然,您必须编写所描述的排序逻辑,但是无论如何都必须这样做。这种方式基本上是您必须要做的全部)。
>