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

伪代码示例:

let array = [100, 0, 50]

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

当前回答

有两种方法更简单:

let arr = [2, 6, 1, 0]

方式1:

let max = Math.max.apply(null, arr)

方式2:

let max = arr.reduce(function(a, b) {
    return Math.max(a, b);
});

其他回答

您可能不希望向Array原型添加方法,这可能与其他库冲突。

我见过很多使用forEach的例子,我不推荐它用于大型数组,因为它的性能比for循环差。https://coderwall.com/p/kvzbpa/don-t-use-array-foreach-use-for-instead

同时数学。max(数学,[1,2,3]);总是给我NaN?

function minArray(a) {
  var min=a[0]; for(var i=0,j=a.length;i<j;i++){min=a[i]<min?a[i]:min;}
  return min;
}

function maxArray(a) {
  var max=a[0]; for(var i=0,j=a.length;i<j;i++){max=a[i]>max?a[i]:max;}
  return max;
}

minArray([1,2,3]); // returns 1

如果你有一个对象数组,下面的minArray()函数示例将接受2个参数,第一个是数组,第二个是对象键值比较的键名。本例中的函数将返回给定键值最小的数组的下标。

function minArray(a, key) {
  var min, i, j, index=0;
  if(!key) {
    min=a[0]; 
    for(i=0,j=a.length;i<j;i++){min=a[i]<min?a[i]:min;}
    return min;
  }
  min=a[0][key];
  for(i=0,j=a.length;i<j;i++){
    if(a[i][key]<min) {
      min = a[i][key];
      index = i;
    }
  }
    return index;
}

var a = [{fee: 9}, {fee: 2}, {fee: 5}];

minArray(a, "fee"); // returns 1, as 1 is the proper array index for the 2nd array element.

你可以在项目的任何地方使用下面的函数:

function getMin(array){
    return Math.min.apply(Math,array);
}

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

然后你可以调用传递数组的函数:

var myArray = [1,2,3,4,5,6,7];
var maximo = getMax(myArray); //return the highest number

如果你有一个复杂的对象,你可以使用排序....例如:如果我想获得包含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]是最大值。

如果你使用的是原型机,ChaosPandion的解决方案是有效的。如果不是,考虑一下:

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

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

如果数组值不是整数,上面的函数将返回NaN,因此您应该构建一些功能来避免这种情况。否则这个就可以了。

让arr =[76年20日8日,29日,7日,21日,9] Math.max。应用(数学,arr);/ / 76