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

推薦する

LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)

[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...

Docker ベースの Redis マスタースレーブ クラスタの実装

目次1. Redisイメージを取得する2. 6つのRedisコンテナを作成する3. Redisコンテ...

JavaScript の一般的なステートメント ループ、判定、文字列から数値

目次1. スイッチ2. whileループ3. Do/Whileループ3. 文字列を数値に変換する1....

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

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

Nginx10m+の高並列カーネル最適化に関する簡単な説明

高い同時実行性とは何ですか?デフォルトの Linux カーネル パラメータは、最も一般的なシナリオ向...

入力が完了したことを検出し、次のコンテンツを自動的に入力する HTML を実装する方法

前回の記事では、入力完了の簡単な検出を実現しましたが、今回はさらに一歩進んで、入力が完了した後に次の...

我々は自らの力でIE6を絶滅に追い込んでいる

実際、IE6 が本当にいつ消滅するのか私たちは毎日疑問に思っていますが、2001 年のリリース以来、...

JavaScript プロトタイプチェーンを理解するための 2 つの図

目次1. プロトタイプの関係2. プロトタイプチェーン3. 結論序文:前回の記事では、JavaScr...

CSSスクロールバースタイル設定の実装

Webkit スクロールバー スタイルのリセット1. スクロールバーには、スクロールバー ボタンとト...

Vue でよく使われる高階関数と包括的な例

1. 配列のよく使われる高階関数配列があり、その配列に対して次の操作を実行したいとします。 100 ...

フローティングメニュー、上下スクロール効果を実現できます

コードはさらに合理化できますが、時間の制約があるため、まずはここで投稿して、自分で最適化してメニュー...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

iOS スタイルの選択ボックスの開閉機能を実装するための純粋な CSS

1 効果デモアドレス: https://www.albertyy.com/2020/7/check...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...