求数组的最大值和最小值的诸多方法

72 阅读2分钟

1. 循环遍历

const arr = [1, 4, 54, 6, 7, 6, 7, 87, 3, 6, 8, 6, 97, 0, 86, 5, 657, 4];
// 设定一个基准,以数组第一个元素为准
let max = arr[0];
let min = arr[0];
for (let i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    } else if (arr[i] < min) {
        min = arr[i];
    }
}
console.log(max, min);

2. 先排序,后直接取值

const arr = [1, 4, 54, 6, 7, 6, 7, 87, 3, 6, 8, 6, 97, 0, 86, 5, 657, 4];
// 先对数组进行排序,再取最大值和最小值(冒泡排序/快速排序/sort方法等)
// 这里使用数组的sort方法,它接收一个函数作为参数,这个函数本身接收两个参数ab
// 其中a表示数组靠前的值,b表示数组靠后的值,也就是说,a不可能是4b不可能是1
// 如果返回一个正值,则交换ab,否则不交换
arr.sort(function (a, b) {
    return a - b;// 只有当a>b,即前面的值大于后面的值,交换,也就是从小到大排序
});
const max = arr[arr.length - 1];
const min = arr[0];
console.log(max, min);

3. Math.max/min方法

// 1.由于Math.max/min方法参数只能接收参数列表的形式,因此可以巧妙结合apply使用,因为apply方法可以使用数组形式传参
// 第一个参数是指定函数的上下文,由于这里不需要,可以使用null
const arr = [1, 4, 54, 6, 7, 6, 7, 87, 3, 6, 8, 6, 97, 0, 86, 5, 657, 4];
const max = Math.max.apply(null,arr);
const min = Math.min.apply(null,arr);
console.log(max, min);
// 2.可以直接将数组展开成列表形式作为该方法的参数
const max = Math.max(...arr);
const min = Math.min(...arr);
console.log(max, min);

4. 数组的reduce方法

// 核心机制类似于第一种方法
const arr = [1, 4, 54, 6, 7, 6, 7, 87, 3, 6, 8, 6, 97, 0, 86, 5, 657, 4];
const max = arr.reduce(function (prev, cur) {
    return cur > prev ? cur : prev;
});
const min = arr.reduce(function (prev, cur) {
    return cur < prev ? cur : prev;
});
console.log(max, min);