求数组最大值和最小值
// 如何求出数组的最大值和最小值?
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);
}
评论
填写昵称与邮箱即可评论,无需登录。