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 中国語/英語環境切り替えチュートリアル図

推薦する

Spring Cloud での Docker デプロイメントに jib を使用する詳細な手順

ジブの紹介Jib は Google が開発した、Java アプリケーションの Docker および ...

Reactイベントメカニズムソースコード分析

目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...

詳細なハードウェア情報を取得するための Linux のいくつかのコマンドの詳細な説明

Linux システム、特にサーバー システムでは、デバイスのハードウェア情報を表示する必要がよくあり...

Vue はデータの変更をどのように追跡しますか?

目次背景例誤解 - コールスタックを表示するためにウォッチでブレークポイントを設定する正しいアプロー...

js でオブジェクトを作成するさまざまな方法とその長所と短所のまとめ

目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

innodb_autoinc_lock_mode の表現と値の選択方法についての簡単な説明

前提条件: Percona 5.6 バージョン、トランザクション分離レベルは RR mysql>...

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...

tomcatでcatalina.outログをカットする3つの方法の詳細な説明

1. ログセグメンテーションのためのLog4j 1) log4j-1.2.17.jar、tomcat...

HTMLの空リンクの役割についての簡単な説明

空のリンク:つまり、ターゲット エンドポイントとのリンクはありません。フォーマット <a hr...

CSS の複数行テキストがオーバーフローする場合の省略記号の例

複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...

MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...

Linux ファイアウォール設定の詳細な手順 (yum ウェアハウス設定に基づく)

序文この実験では、デバッグ用に2つの仮想マシン(CentOs6とRed Hat 6)を準備します。 ...

オブジェクトのプロパティを反復処理する際の TypeScript の問題

目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...