求数组最大值和最小值
```js // 如何求出数组的最大值和最小值?
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); } ```