我有一系列员工信息,这些信息按员工子部门与给定部门内子部门的优先级进行比较排序。
因此,当在索引中单击员工姓名时,他们的部门(存储为数据属性)将用于抓取共享该部门的所有其他员工,并且此集合按照子部门优先级排序,在另一个阵列中手动设置
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;
});
但这不起作用。上面显示的排序是我第一次也是唯一的排序体验。任何帮助表示赞赏!
答案 0 :(得分: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);
}
换句话说,在排序时,如果您注意到您正在比较同一部门中的两个元素,则检查是否是经理。如果是这样,那个应该在另一个之前。如果他们在不同的部门,那就重要了。
如果他们在同一个部门,但他们都不是经理,那么您可以按名称或其他任何你喜欢的方式进行比较。