最大/最小のプロパティを取得する
【採用】プロパティを取得する (reduce)
const status = {
h: 183,
a: 182,
b: 116,
c: 90,
d: 105,
s: 169,
};
const [maxPropName, maxPropValue] =
Object.entries(status).reduce((max, x) => max[1] < x[1] ? x : max, [, -Infinity]);
const [minPropName, minPropValue] =
Object.entries(status).reduce((min, x) => min[1] > x[1] ? x : min, [, Infinity]);
- Object.entries() で配列に変換して
- Array.prototype.reduce() で最大/最小の要素を選んで
- 分割代入 でプロパティ名, プロパティ値 を拾います
【ボツ】プロパティを取得する (sort & push/shift)
const [maxPropName, maxPropValue] =
Object.entries(status).sort(([, a], [, b]) => a - b).pop();
const [minPropName, minPropValue] =
Object.entries(status).sort(([, a], [, b]) => a - b).shift();
もとはコード量が少ないsortを使おうと考えていましたが、無駄に計算量が増えてしまうのでボツにしました。
最大/最小のプロパティ値を取得する
プロパティ値を取得する (maxでサクッと)
const maxPropValue = Math.max(...Object.values(status));
const minPropValue = Math.min(...Object.values(status));
プロパティ値だけなら、最大/最小の取得はmax/minで一発ですね。
プロパティ値を取得する (reduceで安全に)
const maxPropValue = Object.values(status).reduce((max, a) => Math.max(max, a), -Infinity);
const minPropValue = Object.values(status).reduce((min, a) => Math.min(min, a), Infinity);
プロパティの数(=配列の長さ)を気にせず安全に計算するならreduceを使いましょう。