如何实现javascript分组团队排序?

时间:2018-09-10 13:02:25

标签: javascript algorithm sorting

我想为一组团队实施排序功能,其中要根据团队名称的子字符串对团队进行排序,然后按组进行排序。例如,数组可能如下所示:

["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. 项目总监
  2. 其中包含“ 导演”的其他内容
  3. 其中包含“ 项目的所有内容
  4. 其中包含“ 支持”的任何内容

我当时想通过某种方式插入?您将如何实施?

任何您非常赞赏的建议。

非常感谢。

更新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);
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,您不必担心(或实现)特定的排序算法。 Array.sort函数可以将定义列表顺序的compareFunction用作参数。只需使用它即可。

(当然,您必须编写所描述的排序逻辑,但是无论如何都必须这样做。这种方式基本上是您必须要做的全部)。

>