求数组最大值最小值问题【最全解】

大家在面试中是否经常会被问到求数组中最大或者最小值的问题,要求用多重解决办法。最初觉得这个问题就像‘’茴香豆‘’的‘’茴‘’字有几种写法。实际考验的是应聘者对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,关注我,我们一起强大!

你可能感兴趣的:(大前端)