いくつかの数字を含む単純なJavaScript配列オブジェクトがあります。
[267, 306, 108]
この配列で最大の数を見つける関数はありますか?
いくつかの数字を含む単純なJavaScript配列オブジェクトがあります。
[267, 306, 108]
この配列で最大の数を見つける関数はありますか?
Array.max = function( array ){
return Math.max.apply( Math, array );
};
警告:一部のVMでは引数の最大数が65535と少ないため、配列がそれほど小さいかどうかわからない場合は、forループを使用してください。
apply関数を使用して、Math.maxを呼び出すことができます。
var array = [267, 306, 108];
var largest = Math.max.apply(Math, array); // 306
それはどのように機能しますか?
apply関数は、配列として提供された、指定されたコンテキストと引数を使用して別の関数を呼び出すために使用されます。min関数とmax関数は、任意の数の入力引数を取ることができます。Math.max(val1、val2、...、valN)
したがって、次のように呼びます。
Math.min.apply(Math, [1, 2, 3, 4]);
適用関数は実行されます:
Math.min(1, 2, 3, 4);
これらの関数は静的であるため、最初のパラメーターであるコンテキストは重要ではないことに注意してください。それらは、コンテキストとして渡されるものに関係なく機能します。
より大きな配列(〜100k要素)の場合、実際には単純なfor
ループで配列を反復するだけで十分であり、パフォーマンスが〜30%向上することがわかりましたMath.max.apply()
:
function mymax(a)
{
var m = -Infinity, i = 0, n = a.length;
for (; i != n; ++i) {
if (a[i] > m) {
m = a[i];
}
}
return m;
}
配列を降順で並べ替えて、最初の項目を取得できます。
[267, 306, 108].sort(function(a,b){return b-a;})[0]
使用する:
var arr = [1, 2, 3, 4];
var largest = arr.reduce(function(x,y) {
return (x > y) ? x : y;
});
console.log(largest);
Array.reduceを使用します。
[0,1,2,3,4].reduce(function(previousValue, currentValue){
return Math.max(previousValue,currentValue);
});
最大値と最小値を見つけるのは簡単で手動の方法です。Math.max.apply
このコードは;よりもはるかに高速です。配列で最大1000kの数値を試しました。
function findmax(array)
{
var max = 0;
var a = array.length;
for (counter=0;counter<a;counter++)
{
if (array[counter] > max)
{
max = array[counter];
}
}
return max;
}
function findmin(array)
{
var min = array[0];
var a = array.length;
for (counter=0;counter<a;counter++)
{
if (array[counter] < min)
{
min = array[counter];
}
}
return min;
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
const inputArray = [ 1, 3, 4, 9, 16, 2, 20, 18];
const maxNumber = Math.max(...inputArray);
console.log(maxNumber);
はい、もちろん存在Math.max.apply(null,[23,45,67,-45])
し、結果は返され67
ます。
forEachも使用できます。
var maximum = Number.MIN_SAFE_INTEGER;
var array = [-3, -2, 217, 9, -8, 46];
array.forEach(function(value){
if(value > maximum) {
maximum = value;
}
});
console.log(maximum); // 217
1 つのfor/of
ループ ソリューション:
const numbers = [2, 4, 6, 8, 80, 56, 10];
const findMax = (...numbers) => {
let currentMax = numbers[0]; // 2
for (const number of numbers) {
if (number > currentMax) {
console.log(number, currentMax);
currentMax = number;
}
}
console.log('Largest ', currentMax);
return currentMax;
};
findMax(...numbers);