我有一个简单的JavaScript数组对象包含几个数字。

[267, 306, 108]

有没有一个函数能找到这个数组中最大的数?


当前回答

在数组中返回最大数字的解。

const largestOfFour = arr => {
    let arr2 = [];
    arr.map(e => {
        let numStart = -Infinity;
        e.forEach(num => {
            if (num > numStart) {
                numStart = num;

            }
        })
        arr2.push(numStart);
    })
    return arr2;
}

其他回答

求多维数组中最大的数

var max = [];

for(var i=0; arr.length>i; i++ ) {

   var arra = arr[i];
   var largest = Math.max.apply(Math, arra);
   max.push(largest);
}
return max;

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

使用冒泡排序找到最大和最小值

Var arr = [267, 306, 108]; (i = 0 k = 0;我< arr.length;我+ +){ (j = 0;<我;j + +) { 如果(arr[我]> arr [j]) { K = arr[i]; Arr [i] = Arr [j]; r[j] = k; } } } console.log('最大数字:'+ arr[0]); console.log('最小值:'+ arr[arr.length-1]);

最简单的语法,使用新的展开操作符:

var arr = [1, 2, 3];
var max = Math.max(...arr);

来源:Mozilla MDN

几乎所有的答案都使用Math.max.apply(),这很好,但它有局限性。

函数参数被放置在堆栈上,这有一个缺点——限制。因此,如果你的数组大于限制,它将失败与RangeError:最大调用堆栈大小超过。

为了找到一个调用堆栈大小,我使用了下面的代码:

var ar = [];
for (var i = 1; i < 100*99999; i++) {
  ar.push(1);
  try {
    var max = Math.max.apply(Math, ar);
  } catch(e) {
    console.log('Limit reached: '+i+' error is: '+e);
    break;
  }
}

它在我的机器上的Firefox上是最大的——591519。这意味着如果数组包含超过591519个项,Math.max.apply()将导致RangeError。

这个问题的最佳解决方案是迭代方法(来源:https://developer.mozilla.org/):)

max = -Infinity, min = +Infinity;

for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] > max)
    max = numbers[i];
  if (numbers[i] < min)
    min = numbers[i];
}

我在我的博客上写过这个问题。