0

我有一组员工信息,这些信息通过将员工的子部门与给定部门内的子部门的优先级进行比较来排序。

因此,当在索引中单击员工姓名时,他们的部门(存储为数据属性)用于获取共享该部门的所有其他员工,并且此集合按子部门优先级在另一个数组中手动​​设置

var results = $.grep(data, function(employee) {
    if(employee.DEPT == dept) {
        return employee.DEPT = dept;
    }
});

// ** NOTE 'deptorder' is "Department" : [ "Subdepartment1", "Subdepartment2" ] defined manually
// pick the order of subdepts based on the dept
order = deptorder[dept];

第一种:

results.sort(function(a, b) {
    return $.inArray(a.SUBDEPT, order) - $.inArray(b.SUBDEPT, order);
});

然后,我遍历排序后的数组并创建一个员工信息网格,其中部分标题将员工按其子部门划分。

问题:我需要在将每个子部门的员工分类到子部门组后对其进行安排。我愿意接受有关如何做到这一点的建议,但我需要做的只是标记一个“经理”,并让他们在给定子部门的网格中排在第一位。渲染经理后,其余部分可以按字母顺序排列,或者其他。

如何再次对数组进行排序以实现此目的?现在经理有一个employee.MANAGER 属性'1',而其余的有''。

我试过了

results.sort(function(a, b) {
    return (a.MANAGER == 1) - b;
});

但这不起作用。上面显示的排序是我第一次也是唯一一次使用排序的经验。任何帮助表示赞赏!

4

1 回答 1

1

您可以一次完成所有比较.sort()

results.sort(function(a, b) {
  if (a.SUBDEPT == b.SUBDEPT) {
    if (a.MANAGER == 1)
      return -1; // a goes first
    if (b.MANAGER == 1)
      return 1; // b goes first
    return 0; // or compare names
  }
  return $.inArray(a.SUBDEPT, order) - $.inArray(b.SUBDEPT, order);
}

换句话说,在排序时,如果您注意到您正在比较同一部门中的两个元素,您会检查其中一个是否是经理。如果是这样,那一个应该先于另一个。如果他们在不同的部门,那才是最重要的。

如果他们在同一个部门但都不是经理,那么您可以按姓名或您喜欢的任何其他内容进行比较。

于 2013-09-16T16:23:32.467 回答