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

すべての比較を 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);
}

つまり、並べ替え中に同じ部署の 2 つの要素を比較していることに気付いた場合は、どちらかがマネージャーであるかどうかを確認します。もしそうなら、それは他のものの前に行くべきです。彼らが別の部署にいる場合、それがすべてです。

彼らが同じ部署にいて、どちらもマネージャーではない場合は、名前または他の好きなもので比較できます。

于 2013-09-16T16:23:32.467 に答える