美文网首页
求数组最大或最小值的方法总结

求数组最大或最小值的方法总结

作者: 接下来的冬天 | 来源:发表于2021-11-15 11:03 被阅读0次

    Math.max

    JavaScript 提供了 Math.max 函数返回一组数中的最大值

    用法:

    Math.max([value1[,value2, ...]])
    

    值得注意的是:

    • 如果有任一参数不能被转换为数值,则结果为 NaN。
    • max 是 Math 的静态方法,所以应该像这样使用:Math.max(),而不是作为 Math 实例的方法 (简单的来说,就是不使用 new )
    • 如果没有参数,则结果为 -Infinity (注意是负无穷大)

    而我们需要分析的是:

    如果任一参数不能被转换为数值,这就意味着如果参数可以被转换成数字,就是可以进行比较的,比如:

    Math.max(true, 0) // 1
    Math.max(true, '2', null) // 2
    Math.max(1, undefined) // NaN
    Math.max(1, {}) // NaN
    

    如果没有参数,则结果为 -Infinity,对应的,Math.min 函数,如果没有参数,则结果为 Infinity,所以:

    var min = Math.min();
    var max = Math.max();
    console.log(min > max);
    

    求数组最大或最小值的几种方法

    1. 原始方法

    const arr = [10, 2, 88, 5];
    
    // 传统方法
    let maxNum = arr[0],
        minNum = arr[0];
    arr.forEach((item, i) => {
      maxNum = Math.max(maxNum, arr[i])
      minNum = Math.min(minNum, arr[i])
    })
    
    console.log(maxNum) // 88
    console.log(minNum) // 2
    

    2. reduce()方法

    既然是通过遍历数组求出一个最终值,那么我们就可以使用 reduce 方法:

    const arr = [10, 2, 88, 5];
    
    function max(prev, next) {
        return Math.max(prev, next);
    }
    console.log(arr.reduce(max)); // 88
    

    3. apply()方法

    var arr = [10, 2, 88, 5];
    console.log(Math.max.apply(null, arr))
    

    apply 方法的最主要的作用是改变当前函数的 this 指向,还有一个作用就是将数组中的元素一个一个的当做参数传入方法,apply 方法和 call 方法基本相同, 此处 Math.max.apply(null, arr)Math.max.apply(null, [10, 2, 88, 5]) 相同, 所以当我们调用 apply 方法的时候,相当于把数组中的元素挨个当做参数传入方法中,这也就解决了 Math.max(min) 不能直接获取数组中的最大(小)值问题了

    4. 数组排序sort()方法

    如果我们先对数组进行一次排序,那么最大值就是最后一个值:

    var arr = [10, 2, 88, 5];
    
    arr.sort(function(a,b){return a - b;});
    console.log(arr[arr.length - 1]) // 88
    

    5. ES6数组的扩展运算符(...)

    var arr = [10, 2, 88, 5];
    
    console.log(Math.max(...arr)) // 88
    

    相关文章

      网友评论

          本文标题:求数组最大或最小值的方法总结

          本文链接:https://www.haomeiwen.com/subject/outqtrtx.html