跳到正文
文章封面

【编程题与分析题】求数组最大值和最小值

求数组最大值和最小值

// 如何求出数组的最大值和最小值?

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

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

// v1: 原始方法
function max(arr) {
    let max = arr[0];
    for (let i = 0, len = arr.length; i < len; i++) {
        max = Math.max(max, arr[i]);
    }
    return max;
}


// v2: 使用reduce
function max(arr) {
    return arr.reduce((prev, next) => {
        return Math.max(prev, next);
    });

    return arr.reduce((prev, next) => {
        return prev > next ? prev : next;
    });
}

// v3: 使用eval, 由于Math.max支持多个参数来进行比较,可以把数组转换为多个参数
// 原因:使用eval里面的字符串实际上是发生了一个隐式转换,[1, 2, 3] ==> 1, 2, 3
// 相当于是 eval("Math.max(6,4,1,8,2,11,23)");
function max(arr) {
    return eval(`Math.max(${arr})`)
}

// v4: 使用apply来实现
function max(arr) {
    return Math.max.apply(null, arr);
}

// v5: 使用ES6..., 可以把一个数组转换为参数序列
function max(arr) {
    return Math.max(...arr);
}

function max(arr) {
    return Reflect.apply(Math.max, Math, arr);
}

评论

填写昵称与邮箱即可评论,无需登录。

推荐阅读