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;
});
比較ロジックが見えやすくなる。