JS数组中找最大值与最小值的方法

848 阅读2分钟

1. 循环遍历

使用forEach:以找最大值为例,假设数组元素最大值max,设置max初始值0。使用forEach遍历数组,将每个元素与max比较,取较大值更新为max。

calcMax = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    let max = 0;
    arr.forEach((item, index) => {
        if(item > max){
            max = item;
        }
    });
    return max;
}
console.log(calcMax());

使用for循环:以找最小值为例,假设数组第一个元素为最小值min,使用for从第二个元素开始遍历整个数组,将当前遍历到的元素与min对比,更新两者中较小值为min。

calcMin = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    let min = arr[0];
    for(let i = 0; i < arr.length; i ++){
        if(arr[i] < min){
            min = arr[i];
        }
    }
    return min;
}
console.log(calcMin());

2.sort排序

sort排序中允许传入 sortFunction 参数,sortFunction 有两个入参,a 和 b,即两个将被比较的元素。在 a、b 比较时会出现下列三种情况:

  • 如果sortFunction输出的结果小于 0a 被排到 b 之前
    
  • 如果sortFunction输出的结果等于 0ab 的顺序不变
    
  • 如果sortFunction输出的结果大于 0b 被排到 a 之前
    
在使用此方法时需要注意,sort排序会改变原数组。

在求解最大值时,使用sort排序将数组从大到小排列,数组的第一个值即为最大值:

calcMax = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    arr.sort((a, b) =>  b - a );
    return arr[0];
}
console.log(calcMax());

在求解最小值时,使用sort排序将数组从小到大排列,数组的第一个值即为最小值:

calcMin = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    arr.sort((a, b) =>  a - b );
    return arr[0];
}
console.log(calcMin());

3.使用reduce()方法

关于reduce方法的具体使用,可以查看另一篇文章# JS reduce()方法详解
求最大值(最小值)时,从数组第一个元素开始,对当前元素与当前最大(最小)值进行比较,保留两者中较大(较小)值作为下一次比较的最大(最小)值。
求最大值:

calcMax = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return arr.reduce((a, b) =>  {
        return a > b ? a : b;
    } );
}
console.log(calcMax());

求最小值:

calcMin = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return arr.reduce((a, b) =>  {
        return a < b ? a : b;
    } );
}
console.log(calcMin());

4.使用Math.max()和Math.min()方法

由于Math.max()和Math.min()方法接收参数为一个或多个数字,因此首先要对数组进行处理。可以采用apply()方法或者扩展运算符对数组进行转换。
求最大值:

calcMax = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return Math.max.apply(null, arr);
}
console.log(calcMax());

calcMax = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return Math.max(...arr);
}
console.log(calcMax());

求最小值:

calcMin = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return Math.min.apply(null, arr);
}
console.log(calcMin());

calcMin = () => {
    const arr = [1, 26, 78, 199, 33, 0, 86];
    return Math.min(...arr);
}
console.log(calcMin());