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

伪代码示例:

let array = [100, 0, 50]

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

当前回答

minHeight = Math.min.apply({},YourArray);
minKey    = getCertainKey(YourArray,minHeight);
maxHeight = Math.max.apply({},YourArray);
maxKey    = getCertainKey(YourArray,minHeight);
function getCertainKey(array,certainValue){
   for(var key in array){
      if (array[key]==certainValue)
         return key;
   }
} 

其他回答

出于学习目的,你可以使用变量和For循环,而不使用内置函数。

// Input sample data to the function var arr = [-1, 0, 3, 100, 99, 2, 99]; // Just to show the result console.log(findMinMax(arr)); function findMinMax(arr) { let arraySize = arr.length; if (arraySize > 0) { var MaxNumber = MinNumber = arr[0]; for (var i = 0; i <= arraySize; i++) { if (arr[i] > MaxNumber) { MaxNumber = arr[i]; }else if(arr[i] < MinNumber) { MinNumber = arr[i]; } } var minMax = [MinNumber,MaxNumber]; return minMax; } else { return 0; } }

找到数组元素的最小值的一个简单解决方案是使用数组原型函数reduce:

A = [4,3,-9,-2,2,1];
A.reduce((min, val) => val < min ? val : min, A[0]); // returns -9

或者使用JavaScript内置的Math.Min()函数(感谢@Tenflex):

A.reduce((min,val) => Math.min(min,val), A[0]);

这设置最小值为A[0],然后检查A[1]…A[n]是否严格小于当前最小值。如果A[i] < min,则min更新为A[i]。当所有数组元素都处理完后,返回min作为结果。

编辑:包括最小值位置:

A = [4,3,-9,-2,2,1];
A.reduce((min, val) => val < min._min ? {_min: val, _idx: min._curr, _curr: min._curr + 1} : {_min: min._min, _idx: min._idx, _curr: min._curr + 1}, {_min: A[0], _idx: 0, _curr: 0}); // returns { _min: -9, _idx: 2, _curr: 6 }

除了使用数学函数max和min之外,另一个要使用的函数是sort()的内置函数:开始吧

const nums = [12, 67, 58, 30].sort((x, y) => 
x -  y)
let min_val = nums[0]
let max_val = nums[nums.length -1]

我想用下面的方式来做这件事

const findMaxAndMin = (arr) => {
  if (arr.length <= 0) return -1;
  let min = arr[0];
  let max = arr[0];
  arr.forEach((n) => {
    n > max ? (max = n) : false;
    n < min ? (min = n) : false;
  });
  return [min, max];
};

您可以使用lodash的方法

_.max([4, 2, 8, 6]);
returns => 8

https://lodash.com/docs/4.17.15#max

_.min([4, 2, 8, 6]);
returns => 2

https://lodash.com/docs/4.17.15#min