【问题标题】:Re-sorting an array without scrambling the original sort在不打乱原始排序的情况下重新排序数组
【发布时间】:2013-09-17 00:23:32
【问题描述】:

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

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

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 方法总是就地的。您可以随时复制它,也许使用 underscore.js clone 之类的东西。

标签: javascript arrays json sorting


【解决方案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);
}

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

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

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2021-03-09
    • 2013-04-13
    • 2012-03-24
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多