Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不扰乱原始排序的情况下重新排序数组_Javascript_Arrays_Json_Sorting - Fatal编程技术网

Javascript 在不扰乱原始排序的情况下重新排序数组

Javascript 在不扰乱原始排序的情况下重新排序数组,javascript,arrays,json,sorting,Javascript,Arrays,Json,Sorting,我有一个员工信息数组,通过比较员工的子部门与给定部门内子部门的优先级来排序 因此,当在索引中单击员工姓名时,他们的部门(存储为数据属性)将用于抓取共享该部门的所有其他员工,并且此集合将按照在另一个数组中手动设置的子部门优先级进行排序 var results = $.grep(data, function(employee) { if(employee.DEPT == dept) { return employee.DEPT = dept; } }); // **

我有一个员工信息数组,通过比较员工的子部门与给定部门内子部门的优先级来排序

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

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

但这不起作用。上面显示的排序是我第一次也是唯一一次使用排序的经验。感谢您的帮助

您可以在一个
.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);
}
换言之,在排序时,如果您注意到您正在比较同一部门中的两个元素,您可以检查其中一个是否是经理。如果是这样,那一个应该先于另一个。如果他们在不同的部门,那么这就是最重要的

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

数组方法始终适用。您可以随时复制它,也许可以使用类似的方法。