大家在面试中是否经常会被问到求数组中最大或者最小值的问题,要求用多重解决办法。最初觉得这个问题就像‘’茴香豆‘’的‘’茴‘’字有几种写法。实际考验的是应聘者对JS语法,尤其ES6之后语法的熟悉掌握程度。 在这里我总结了我工作过程中所用过的一些求解方法。
如下举栗,求下列数组中的最大值和最小值:let arr=[-1,14,6,18,21,1024,0,-99,521]
1.假设法
假设数组的第一个元素是极值,然后用遍历的临时值和这个值逐一比较,如果后面的某一个值比假设的值更大或更小,我们就把假设值做替换,直到最后得到的结果就是我们想要的极值。
// 获取最大值:
var max = arr[0];
for(var i = 1,len=arr.length; i<len;i++) {
var cur = arr[i];
cur > max ? max = cur : null
}
console.log(max);
// 获取最小值:
var min = arr[0];
for(var i = 1; i < arr.length; i++) {
var cur = arr[i];
cur < min ? min = cur : null
}
console.log(min)
2.Math的max和min方法,使用apply来实现,apply传入的是一个数组
const min = Math.min.apply(null,arr)
const max = Math.max.apply(null,arr)
3. 字符串拼接法
利用字符串的toString和join方法把数组转换为字符串,然后和Math的max和min方法拼接,再执行eval方法
//第一种写法
var max = eval("Math.max(" + arr.toString() + ")");
var min = eval("Math.min(" + arr.toString() + ")");
//第二种写法
var max = eval("Math.max(" + arr.join() + ")");
var min = eval("Math.min(" + arr.join() + ")");
4. 临时变量+冒泡排序法
let len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr[arr.length - 1])
//求最小值同理
ES6方法
5. 扩展运算符数组解构。
const min = Math.min(...arr)
const max = Math.max(...arr)
6. sort方法
const min = arr.sort((a,b)=>a-b)[0]
const max =arr.sort((a,b)=>a-b)[arr.length-1]
const min =arr.sort((a,b) => a < b ? -1 : 1)[0]
const max =arr.sort((a,b) => a >b ? false : true)[0]
7.reduce方法
const min = arr.reduce((min,num)=>min<num?min:num)
const max =arr.reduce((max,num)=>max>num?max:num)
小伙伴如果觉得我的内容有价值就请关注我,我会经常更新blog,关注我,我们一起强大!