JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

undefinedなどの要素が混在する配列から最大の数値を見つける方法 - JavaScript

JavaScriptでは、数値・文字列・falsyな値(undefinednullなど)が混在する配列の中から、最大の数値だけを取り出したい場面があります。本記事では、そのような配列を受け取り、含まれる最大の数値を返す関数の実装方法を解説します。

問題の概要

例えば、以下のようにundefinednullNaNといった値が混ざった配列が入力として与えられたとします。

const arr = [23, 'hello', undefined, null, 21, 65, NaN, 1, undefined, 'hii'];

この場合、関数は配列内の最大の数値である65を返す必要があります。

実装のポイント

  • 初期値を-Infinityにすることで、どんな負の数値にも対応できる
  • 各要素を単項プラス演算子(+)で数値に変換し、変換結果がfalsy(NaNなど)であればスキップする
  • Math.max()を使って現在の最大値と比較しながら順に更新していく

コード例

const arr = [23, 'hello', undefined, null, 21, 65, NaN, 1, undefined, 'hii'];
const pickBiggest = arr => {
   let max = -Infinity;
   for(let i = 0; i < arr.length; i++){
      if(!+arr[i]){
         continue;
      };
      max = Math.max(max, +arr[i]);
   };
   return max;
};
console.log(pickBiggest(arr));

出力結果

上記のコードをコンソールで実行すると、次の出力が得られます。

65

コードの解説

+arr[i]によって各要素が数値へ変換されます。文字列「hello」や「hii」、undefinednullNaNに変換され、!NaNtrueとなるため、これらの要素はcontinueによってループ処理から除外されます。一方、有効な数値の要素のみがMath.max()で評価され、最大値が順次更新されていきます。

なお、この実装では数値の0もfalsyと判定されてスキップされる点に注意してください。配列内に正の数値が存在する限り結果には影響しませんが、すべての候補が0以下の場合は期待どおりに動作しないため、必要に応じて判定条件を調整するとよいでしょう。

  1. JavaScriptで配列の要素を同じ配列内に複製する方法

    JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont

  2. 複数の値でJavaScript配列の要素を検索する方法

    JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=