JavaScript で配列の最大値と最小値を実装する 6 つの方法

JavaScript で配列の最大値と最小値を実装する 6 つの方法

配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを記述してください。

1.プロトタイププロパティを通じてmin()とmax()関数を拡張する

アルゴリズム 1 の考え方は、カスタム min() 関数と max() 関数のループで最初の値と後続の値を比較し、最大値と最小値を動的に更新して結果を見つけることです。

        // 最小値 Array.prototype.min = function () {
            min = this[0]とします。
            len = this.length;とします。
            (i = 1; i < len; i++) の場合 {
                もし this[i] < min ならば min = this[i]
            }
            戻り最小値
        }
        // 最大値 Array.prototype.max = function () {
            max = this[0]とします。
            len = this.length;とします。
            (i = 1; i < len; i++) の場合 {
                もし(this[i] > max) max = this[i]
            }
            最大リターン
        }
        // 結果 console.log(arr.min()); // 1
        console.log(arr.max()); // 9

2. Mathオブジェクトのmin()関数とmax()関数を使用する

アルゴリズム 2 の主なアイデアは、apply() 関数を通じて関数の実行本体を変更し、配列をパラメーターとして apply() 関数に渡すことです。この方法では、配列は Math オブジェクトの min() 関数と max() 関数を直接呼び出して、戻り値を取得できます。

        Array.min = 関数(配列) {
            Math.min.apply(Math, 配列) を返す
        }
        // 最大値 Array.max = function (array) {
            Math.max.apply(Math, 配列) を返す
        }
        // 結果 console.log(Array.min(arr)); // 1
        console.log(Array.max(arr)); // 9

3. アルゴリズム2の最適化

アルゴリズム 2 では、 min() 関数と max() 関数が配列型の静的関数として使用されていますが、チェーン呼び出しはサポートされていません。オブジェクト リテラルを使用して簡略化できます。

        // 最小値 Array.prototype.min = function() {
            Math.min.apply({}, this) を返す
        }
        // 最大値 Array.prototype.max = function () {
            Math.max.apply({}, this) を返す
        }
        // 結果 console.log(arr.min()); // 1
        console.log(arr.max()); // 9

アルゴリズム 2 とは異なり、検証中、min() 関数と max() 関数はインスタンス メソッドであるため、配列を介して直接呼び出すことができます。
上記のアルゴリズム コードでは、apply() 関数に渡される最初の値は {} であり、これは実際には現在の実行環境のグローバル オブジェクトを表します。 2 番目のパラメーターは、処理する必要がある配列を指します。
apply 関数の特殊性により、最初のパラメータが null または undefined として指定されると、グローバル オブジェクトへのポインタに自動的に置き換えられ、元の値はラップされます。したがって、最初のパラメータを null (未定義) に設定することもできます。

4. 配列型のreduce()関数を使用する

アルゴリズム 4 の主なアイデアは、reduce() 関数が initialValue を設定せず、配列の最初の要素をコールバック関数の最初のパラメーターとして直接使用し、それを後続の値と順番に比較することです。最大値を見つける必要がある場合、アキュムレータは各ラウンドで大きい値を返します。最小値を見つける必要がある場合、アキュムレータは各ラウンドで小さい値を返します。

        // 最小値 Array.prototype.min = function () {
            this.reduce((pre, cur) => { を返します。
                pre < cur を返す? pre : cur
            })
        }
        // 最大値 Array.prototype.max = function () {
            this.reduce((pre, cur) => { を返します。
                pre > cur を返す? pre : cur
            })
        }
        // 結果 console.log(arr.min()); // 1
        console.log(arr.max()); // 9

5. 配列型のsort()関数を使用する

アルゴリズム 5 の主なアイデアは、配列のネイティブ sort() 関数を使用して配列をソートすることです。ソートが完了すると、最初の要素と最後の要素が配列の最小要素と最大要素になります。
デフォルトの sort() 関数はアルファベット順にソートし、数字は文字列として扱われます。たとえば、数字 18 は「18」として扱われ、数字 6 は「6」として扱われます。ソートする場合、比較は文字列の各ビットに基づいて行われます。「1」は「6」より小さいため、ソートすると「11」は「6」より小さくなります。数値型の配列の場合、これは明らかに不合理です。したがって、カスタムソートを行う必要があります。

        sortArr = arr.sort((a, b) => a - b) とします。
        // 最小値 sortArr[0]
        // 最大値 sortArr[sortArr.length - 1]
        // 結果 console.log(sortArr[0]); // 1
        console.log(sortArr[sortArr.length - 1]); // 9

6. ES6のスプレッド演算子を使用する

        // 最小値 Math.min(...arr)
        // 最大値 Math.max(...arr)
        // 結果 console.log(Math.min(...arr)); // 1
        console.log(Math.max(...arr)); // 9

これで、JavaScript で配列の最大値と最小値を実装する 6 つの方法についての記事は終了です。JavaScript 配列の最大値と最小値に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript で配列を走査して最大値と最小値を見つける方法の例
  • 配列内の最大値または最小値を取得する JS 実装例
  • js配列の最大値と最小値を見つける4つの方法
  • 配列内の最大値と最小値、およびそれらの出力をJavaScriptで次の表に表示するソリューション
  • JavaScript学習ノート:配列内の最大値と最小値を取得する
  • 配列内の最大値と最小値を取得するJavascriptメソッドの概要
  • JS で配列の最大値、最小値、長さを取得する方法
  • JavaScriptで配列の最大値と最小値を取得する方法
  • JavaScriptで配列の最小値と最大値を取得する方法

<<:  MySQL バージョン 5.7.24 のデータベース インストール プロセスの詳細なグラフィック説明

>>:  CentOS6.8 中国語/英語環境切り替えチュートリアル図

推薦する

Linux での MySQL のアンインストールとインストールのグラフィック チュートリアル

ブログを書くのは初めてです。開発に携わって2年になります。仕事の後に何か有意義なことを見つけたいと思...

IE6 で CSS スタイルの div または li の背景のタイリングと境界の破損を解決する方法

IE6 で CSS スタイルの div または li の背景のタイリングや境界の破壊を解決するには、...

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...

MySQL テーブルを作成するためによく使用される SQL ステートメントの概要

最近、私はプロジェクトに取り組んでおり、背景を記述するために SQL ステートメントを使用する必要が...

InnoDB の主な機能 - 挿入キャッシュ、2 度書き込み、適応ハッシュ インデックスの詳細

InnoDB ストレージ エンジンの主な機能には、挿入バッファ、二重書き込み、適応ハッシュインデック...

React setStateデータ更新メカニズムの詳細な説明

目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...

なぜ IE6 が最も多くの人に使用されているのでしょうか?

まず第一に、私はウェブデザイナーです。具体的には、私は XHTML フロントエンド デザイナーです。...

TypeScript ジェネリックを簡単に説明する方法

目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...

HTML における水平および垂直の中央揃え方法の詳細な説明 (基礎)

序文馬を書いていたとき、水平方向と垂直方向の中央揃えの方法について、誰もあまり知らなかったと思います...

WeChatアプレットは記録機能を実装します

この記事では、WeChatアプレットのレコード機能を実装するための具体的なコードを参考までに紹介しま...

nginx リクエスト ヘッダー データ読み取りプロセスの詳細な説明

前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...

Vueはドラッグアンドドロップを使用して構造ツリーを作成します

この記事の例では、ドラッグアンドドロップを使用して構造ツリーを作成するVueの具体的なコードを共有し...

CSS3はさまざまな境界効果を実現します

半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...

MySQL で MHA アーキテクチャのデプロイメントを構築する手順

目次マハ1. MAHアーキテクチャの概要2. 適用可能なシナリオ3. MHAの動作原理4. MHAの...

Web コンポーネントの内部イベント コールバックと問題点の分析

目次前面に書かれたWC とは何でしょうか?現在の欠陥1. コンポーネント内部イベントのコールバック2...