1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクトから最大/最小のプロパティ名を取得する

Posted at

最大/最小のプロパティを取得する

【採用】プロパティを取得する (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]);
  1. Object.entries() で配列に変換して
  2. Array.prototype.reduce() で最大/最小の要素を選んで
  3. 分割代入 でプロパティ名, プロパティ値 を拾います
【ボツ】プロパティを取得する (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を使いましょう。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?