我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?

伪代码示例:

let array = [100, 0, 50]

array.min() //=> 0
array.max() //=> 100

当前回答

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/max

function getMaxOfArray(numArray) { 返回 Math.max.apply(null, numArray); } var arr = [100, 0, 50]; console.log(getMaxOfArray(arr))

这对我很管用。

其他回答

let arr = [2,5,3,5,6,7,1];

let max = Math.max(...arr); // 7
let min = Math.min(...arr); // 1

如果你使用prototype.js框架,那么这段代码将正常工作:

arr.min();
arr.max();

这里有文档:max的Javascript原型框架

对于大数组(~10⁷elements), Math。min和数学。max会在Node.js中产生以下错误。

RangeError:超过最大调用堆栈大小

一个更健壮的解决方案是不把每个元素都添加到调用堆栈中,而是传递一个数组:

function arrayMin(arr) {
  return arr.reduce(function (p, v) {
    return ( p < v ? p : v );
  });
}

function arrayMax(arr) {
  return arr.reduce(function (p, v) {
    return ( p > v ? p : v );
  });
}

如果你关心速度,下面的代码比我电脑上的Math.max.apply快3倍。见https://jsben.ch/JPOyL。

function arrayMin(arr) {
  var len = arr.length, min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
};

function arrayMax(arr) {
  var len = arr.length, max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
};

如果数组包含字符串而不是数字,还需要将它们强制转换为数字。下面的代码可以做到这一点,但它会使代码在我的机器上减慢~10倍。见https://jsben.ch/uPipD。

function arrayMin(arr) {
  var len = arr.length, min = Infinity;
  while (len--) {
    if (Number(arr[len]) < min) {
      min = Number(arr[len]);
    }
  }
  return min;
};

function arrayMax(arr) {
  var len = arr.length, max = -Infinity;
  while (len--) {
    if (Number(arr[len]) > max) {
      max = Number(arr[len]);
    }
  }
  return max;
};

如果你有一个复杂的对象,你可以使用排序....例如:如果我想获得包含MAX/MIN值低于objs的项目。

var objs= [
{name:"Apple",value:3},
{name:"Love",value:32},
{name:"Cheese",value:1},
{name:"Pork",value:77},
{name:"Xmas",value:99}        
];

我会做一个排序:

objs.sort(function(a, b){return a.value-b.value});

然后: objs[0]是最小值,objs[objs. obs]length-1]是最大值。

Let array = [267, 306, 108] let longest = Math.max(…数组);