LoginSignup
0
0

More than 5 years have passed since last update.

JSでcmp関数を定義してsortを読みやすく書く技

Posted at

JavaScript で sort を書く場合、普通なら次のように書く。

ary = ary.sort(function (a, b) {
    var _a, _b;
    _a = a['Instance Family'].replace(/General purpose/, '');
    _b = b['Instance Family'].replace(/General purpose/, '');
    if (_a !== _b) return _a < _b ? -1 : 1;
    _a = a['vCPU'] * 1;
    _b = b['vCPU'] * 1;
    if (_a !== _b) return _a > _b ? -1 : 1;
    _a = a['Memory'].replace(/ .*$/, '').replace(/,/g, '') * 1;
    _b = b['Memory'].replace(/ .*$/, '').replace(/,/g, '') * 1;
    if (_a !== _b) return _a < _b ? -1 : 1;
    return 0;
});

次のようにすると、これがもっと解りやすく書ける。

まずは cmp という関数を定義。

function cmp(a, b, func) {
  a = func(a);
  b = func(b);
  if (a === b) return 0;
  return a < b ? -1 : 1;
}

すると、先ほどんのロジックは次のように書ける。

ary = ary.sort(function (a, b) {
  return false ||
    cmp(a, b, function (v) { return v['Instance Family'].replace(/General purpose/, '') } ||
    cmp(b, a, function (v) { return v['vCPU'] * 1 } ||
    cmp(a, b, function (v) { return v['Memory'].replace(/ .*$/, '').replace(/,/g, '') * 1 } ||
    0;
});

比較ロジックが見えやすくなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0