推奨読書: JavaScript 学習ノート: 配列の追加、削除、変更、チェック
JavaScript 学習メモ Array Sum メソッド
実際の業務では、配列の最大値や最小値を取得する必要がある場合があります。ただし、arr.max() や arr.min() などのメソッドは配列では提供されません。では、このようなメソッドを他の方法で実装することは可能でしょうか?そこで今日は、配列の最大値と最小値を抽出するいくつかの方法を整理します。
配列の最大値を取得します
まず次のことを考えてみてください:
配列の最初の要素を変数に代入し、この変数を最大値として使用します。
2 番目の要素から配列の走査を開始し、シーケンス内の最初の要素と比較します
現在の要素が現在の最大値より大きい場合、現在の要素の値を最大値に割り当てます
次の要素に移動し、前のステップを続行します
配列要素の走査が終了すると、この変数には最大値が格納されます
コードは次のとおりです:
Array.prototype.max = function () { // 将数组第一个元素的值赋给max var max = this[0]; // 使用for 循环从数组第一个值开始做遍历 for (var i = 1; i < this.length; i++) { // 如果元素当前值大于max,就把这个当前值赋值给max if (this[i] > max) { max = this[i]; } } // 返回最大的值 return max; }
例を見てみましょう:
var arr = [1,45,23,3,6,2,7,234,56]; arr.max(); // 234
上記の例では、配列にすべての数値が含まれているので、配列にすべての数値が含まれていない場合はどうなるでしょうか。まずはテストしてみましょう:
var arr = [1,45,23,3,6,2,7,234,56,'2345','a','c']; arr.max(); // 'c'
これは私たちが望む結果ではありません。 (ここで解決策を求めています)
少し前の学習により、for ループのパフォーマンスが forEach() よりも劣ることは誰もが知っています。その場合は、上記のメソッドを forEach() メソッドに変更できます。
Array.prototype.max = function (){ var max = this[0]; this.forEach (function(ele,index,arr){ if(ele > max) { max = ele; } }) return max; } var arr = [1,45,23,3,6,2,7,234,56]; arr.max(); // 234
配列内の最小値を取得します
最大値を取得するという考え方と同様に、arr.min() メソッドを簡単に実装して配列内の最小値を取得できます。
Array.prototype.min = function () { var min = this[0]; this.forEach(function(ele, index,arr) { if(ele < min) { min = ele; } }) return min; } var arr = [1,45,23,3,6,2,7,234,56]; arr.min(); // 1
その他の方法
上記の解決策以外にも、配列のreduce()メソッドを使用するなどの方法があります。以前に学んだ知識を思い出してください。reduce() メソッドはコールバック関数 callbackfn を受け取ることができ、このコールバック関数では、配列内の初期値 (preValue) を配列内の現在処理されている配列項目 (curValue) と比較できます。 preValue が curValue より大きい場合は preValue を返し、それ以外の場合は curValue を返し、というように配列内の最大値を取得します:
Array.prototype.max = function() { return this.reduce(function(preValue, curValue,index,array) { return preValue > curValue ? preValue : curValue; }) } var arr = [1,45,23,3,6,2,7,234,56]; arr.max(); // 234
同様に、同様のメソッドを使用して arr.mix() メソッドを実装し、配列内の最小値を取得することもできます。
Array.prototype.min = function() { return this.reduce(function(preValue, curValue,index,array) { return preValue > curValue ? curValue : preValue; }) } var arr = [1,45,23,3,6,2,7,234,56]; arr.min(); // 1
組み込み関数 Math.max() および Math.min() メソッド
純粋な数値配列の場合、JavaScript の組み込み関数 Math.max() メソッドと Math.min() メソッドを使用できます。これら 2 つの組み込み関数を使用して、配列内の最大値と最上位の値をそれぞれ見つけます。これら 2 つの組み込み関数を使用して配列の最大値と最小値を取得する前に、まず Math.max() 関数と Math.min() 関数を学習してください。
Math.max()
Math.max() 関数は、一連の数値の最大値を返します。
Math.max(1,32,45,31,3442,4); // 3442 Math.max(10, 20); // 20 Math.max(-10, -20); // -10 Math.max(-10, 20); // 20
Math.min()
Math.min() 関数は、一連の数値の最小値を返す Math.max() 関数の逆です。
Math.min(10,20); //10 Math.min(-10,-20); //-20 Math.min(-10,20); //-10 Math.min(1,32,45,31,3442,4); //1
これらの関数にパラメータがない場合、結果は -Infinity になります。パラメータが数値に変換できない場合、結果は NaN になります。最も重要なことは、これら 2 つの関数を数値の配列に直接使用できないことです。ただし、同様の方法がいくつかあります。
Function.prototype.apply() を使用すると、提供された this 配列とパラメーター配列を使用してパラメーターを呼び出すことができます。
// 取出数组中最大值 Array.max = function( array ){ return Math.max.apply( Math, array ); }; // 取出数组中最小值 Array.min = function( array ){ return Math.min.apply( Math, array ); }; var arr = [1,45,23,3,6,2,7,234,56]; Array.max(arr); // 234 Array.min(arr); // 1
Math オブジェクトもオブジェクトであり、次のようなオブジェクト リテラルを使用して記述できます。
Array.prototype.max = function () { return Math.max.apply({},this); } Array.prototype.min = function () { return Math.min.apply({},this); } var arr = [1,45,23,3,6,2,7,234,56]; arr.max(); // 234 arr.min(); // 1
実は、もっと簡単な方法があります。この機能を実装するための ES2015 ベースの方法は、スプレッド演算子を使用することです:
var numbers = [1, 2, 3, 4]; Math.max(...numbers) // 4 Math.min(...numbers) // 1
この演算子により、配列内の値が関数呼び出しの位置で展開されます。
概要
この記事では、配列から最大値と最小値を抽出するためのいくつかの方法をまとめています。これらのメソッドは数値配列のみに適用されますが、配列に他のデータ型が含まれている場合、最大値と最小値のみを抽出する方法(実装方法を知っている場合は、アドバイスをお願いします)。このうち、JavaScript の組み込み関数 Math.max() および Math.min() と Function.prototype.apply() を併用すると、配列内の最大値と最小値を簡単に取得できます。もちろん、最も簡単な方法は ES2015 の表示演算子を使用することです。
これは JavaScript の学習メモにおける配列の最大値と最小値を取得する方法に関するものです。より良い解決策がある場合は、以下のコメントで共有していただければ幸いです。