使用JavaScript函数查找数组中的最大值

使用JavaScript函数查找数组中的最大值,javascript,function,Javascript,Function,我有这个函数,目的是找到数组中的最大(数字)元素,值来自一个参数。我很难理解逻辑,我又老又慢,请原谅。你能用下面的代码逐行解释一下发生了什么事吗 function max(arr){ var max = arr[0]; for(var i=1; i<arr.length; i++){ if(arr[i] > max){ max = arr[i]; } } return max; } max([4,12,3,8,0,22,56]); //outpu

我有这个函数,目的是找到数组中的最大(数字)元素,值来自一个参数。我很难理解逻辑,我又老又慢,请原谅。你能用下面的代码逐行解释一下发生了什么事吗

function max(arr){
 var max = arr[0];
 for(var i=1; i<arr.length; i++){
   if(arr[i] > max){
     max = arr[i];   
   }
  }
return max;
}

max([4,12,3,8,0,22,56]); //output is 56
功能最大值(arr){
var max=arr[0];
对于(变量i=1;i最大值){
max=arr[i];
}
}
返回最大值;
}
最大值([4,12,3,8,0,22,56])//产量为56

在执行循环之前,函数接受第一个数组元素的值作为“起始”(初始)最大值。该值为
4

在每次循环迭代中,将每个数组值与初始“最大值”进行比较
如果当前值大于以前的最大值,则当前值将覆盖它并成为最大值
但是有一种更简单更好的方法:使用内置Javascript对象,比如
Math

考虑下面的最大值搜索:

var arr = [4,12,3,80,0,22,56];
var max = Math.max.apply(null, arr);
console.log(max); // 80
上述方法更适合于搜索最小/最大值。

第一行。将max函数传递给数组[4,12,3,8,0,22,56]

第二行。max变量设置为数组中的第一项。马克斯4岁

第三行。将启动一个for循环,该循环将从1开始,并在arr数组的长度内保持循环

第四行。检查当前数组值是否大于最大值

所以,第一次检查arr[1]是否大于max。如果是,max设置为arr[1] 第一个循环检查(12>4)是否为so max=12

第二次检查arr[2]是否大于最大值。 第二个循环检查(3>12)是否为最大值=12

第三次检查arr[3]是否大于最大值。 第三个循环检查(8>12)是否为最大值=12

第四次检查arr[4]是否大于最大值。 第四个循环检查(0>12)是否不是这样max=12

第五次检查arr[5]是否大于最大值。 第五个循环检查(22>12)是否为最大值=22

第六次检查arr[6]是否大于最大值。 第六个循环检查(56>22)是否为最大值56


第八行。循环已完成,返回max。max是56,下面是代码的三个步骤

  • 代码开始比较数组中的第一个元素和下一个元素
  • 如果条件为真,则检查最大值并存储在最大值(max)中
  • 最后返回最大值
  • 所以我的建议是使用JavaScript内置的reduce方法

    如果数组的元素太多,则Math.max.apply或apply方法将失败或返回错误的结果,因为它们试图将数组元素作为函数参数传递

    所以使用reduce方法,它没有这个问题

    var arr = [2,4,6];
    var max = arr.reduce(function(a, b) {
        return Math.max(a, b);
    });
    console.log(max);
    

    另一种使用reduce的方法:
    。reduce((a,c)=>c>a?c:a,0)
    在我的例子中,必须找到所有的最大值

    var max = -Infinity, result = [];
     for (var i = 0; i < arr.length; ++i) {
        if (arr[i] < max) continue;
        if (arr[i] > max) {
          result = [];
          max = arr[i];
        }
       result.push(max);
    }
    return result; // in case of number of occurrences of max values return result.length;
    
    var max=-Infinity,result=[];
    对于(变量i=0;i最大值){
    结果=[];
    max=arr[i];
    }
    结果:推力(最大值);
    }
    返回结果;//如果出现最大值的次数,返回result.length;
    
    函数“max”用数组第一个元素的值设置当前最大值;然后在for循环中,它遍历数组的所有元素(从具有位置1的元素开始),并应用以下逻辑:当前元素是否大于当前最大值?如果是,则当前元素为新的最大值,并测试以下元素;如果不是,则只测试后续元素。检查完数组的所有元素后,函数返回最大值。您到底不明白什么?它将第一个元素标记为max,然后迭代数组中的每个元素,检查是否有更大的元素。然后它返回实际的最大值。谢谢大家,现在有点清楚了,我想我需要更多这样的例子。。类似于问题和解决方案的方法。