JavaScript

レシピ

配列

配列から最大値と最小値を取得する

配列の要素から最大値と最小値を取得する方法について解説します。

この記事のポイント

  • reduceメソッドと分割代入を使う2種類の方法がある
  • 最大値/最小値の要素の添字(インデックス)はindexOfメソッドで取得する

目次

配列にある要素から最大値と最小値を取得

配列のreduceメソッドMath.maxメソッドMath.minメソッドをそれぞれ組み合わせると、配列の中にある要素から最大値と最小値をそれぞれ取得することができます。

以下のコード例では、変数numbersに入った配列に対してreduceメソッドを使い、その中でMath.maxメソッドMath.minメソッドを使って最大値と最小値を取得します。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1];

// 最大値を取得
var max = numbers.reduce(function(a,b){
  return Math.max(a,b);
});
console.log(max); // 105

// 最小値を取得
var min = numbers.reduce(function(a,b){
  return Math.min(a,b);
});
console.log(min); // -18

分割代入「」を使ってより簡易的にすることもできます。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1];

// 最大値を取得
var max = Math.max(...numbers);
console.log(max); // 105

// 最小値を取得
var min = Math.min(...numbers);
console.log(min); // -18

分割代入「」と配列を組み合わせると、値を一括展開することができます。
例えば上記の配列numbersと分割代入を組み合わせて単純に出力すると、以下のように全ての値を取得できます。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1];

console.log(...numbers); // 80 -1 25 22 4 105 -18 1

最大値/最小値を持つ要素の添字(インデックス)を取得

最大値/最小値を取得したときに、もしその値を持つ要素の添字(インデックス)も取得したいときはindexOfメソッドを使って値を検索します。

以下の例では最大値を取得した後に、その数値を持つ要素の添字(インデックス)を取得します。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1];

var max = numbers.reduce(function(a,b){
  return Math.max(a,b);
});
console.log(max); // 105

// 最大値の数値を持つ要素の添字(インデックス)を取得
var index = numbers.indexOf(max);
console.log(index); // 5

もし最大値を持つ要素が複数ある可能性があるときは、以下のようにwhile文を使って要素が見つかる限りindexOfメソッドを呼び出すことで全ての添字(インデックス)を配列形式で取得することができます。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1, 105];

var max = Math.max(...numbers);
console.log(max); // 105

var index_array = new Array();
var index = numbers.indexOf(max);

while(index !== -1) {
  index_array.push(index);
  index = numbers.indexOf(max, index+1);
}
console.log(index_array); // }(2) [5, 8]

while文で入る前に、最初に1度だけindexOfメソッドで要素を検索することがポイントになります。
ここで1つ目の添字(インデックス)を取得し、その後にwhile文で2つ目以降の添字(インデックス)を検索します。

最小値の要素の添字(インデックス)を取得するときも同じ方法を使用できます。

コード例

var numbers = [ 80, -1, 25, 22, 4, 105, -18, 1, -18];

var min = Math.min(...numbers);
console.log(min); // -18

var index_array = new Array();
var index = numbers.indexOf(min);

while(index !== -1) {
  index_array.push(index);
  index = numbers.indexOf(min, index+1);
}
console.log(index_array); // (2) [6, 8]

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。