217

いくつかの数字を含む単純なJavaScript配列オブジェクトがあります。

[267, 306, 108]

この配列で最大の数を見つける関数はありますか?

4

32 に答える 32

320

救助のためのレジグ:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};

警告一部のVMでは引数の最大数が65535と少ないため、配列がそれほど小さいかどうかわからない場合は、forループを使用してください。

于 2009-09-04T14:19:21.967 に答える
205

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);

これらの関数は静的であるため、最初のパラメーターであるコンテキストは重要ではないことに注意してください。それらは、コンテキストとして渡されるものに関係なく機能します。

于 2009-09-04T14:19:43.773 に答える
37

より大きな配列(〜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;
}

ベンチマーク結果

于 2012-12-10T02:57:34.187 に答える
33

配列を降順で並べ替えて、最初の項目を取得できます。

[267, 306, 108].sort(function(a,b){return b-a;})[0]
于 2009-09-04T14:20:28.673 に答える
29

使用する:

var arr = [1, 2, 3, 4];

var largest = arr.reduce(function(x,y) {
    return (x > y) ? x : y;
});

console.log(largest);
于 2015-05-05T18:47:27.673 に答える
8

Array.reduceを使用します。

[0,1,2,3,4].reduce(function(previousValue, currentValue){
  return Math.max(previousValue,currentValue);
});
于 2014-04-10T15:11:01.287 に答える
5

最大値と最小値を見つけるのは簡単で手動の方法です。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;
}
于 2013-11-26T10:37:26.800 に答える
5

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);

于 2017-06-07T03:43:28.693 に答える
3

はい、もちろん存在Math.max.apply(null,[23,45,67,-45]) し、結果は返され67ます。

于 2015-02-01T15:34:37.860 に答える
1

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

于 2016-09-30T13:57:53.210 に答える
0

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);

于 2020-04-15T20:44:51.703 に答える