繁体   English   中英

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

[英]Find the Max Value in an array using 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]); //output is 56

在执行循环之前,您的函数接受第一个数组元素的值作为“起始”(初始)最大值。 该值为4
在每次循环迭代中,将每个数组值与初始“最大值”进行比较。
如果当前值大于先前的最大值-该当前值将覆盖它并成为最大值。
但是……有一种更简便的方法:使用内置的Javascript对象,例如Math
考虑以下最大值搜索:

var arr = [4,12,3,80,0,22,56];
var max = Math.max.apply(null, arr);
console.log(max); // 80

上述方法对于搜索最小值/最大值是优选的。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

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

第二行。 max变量设置为数组中的第一项。 最大值是4,

第三行。 for循环开始,它将从1开始,并在arr数组的长度上保持循环。

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

因此,它第一次检查arr [1]是否大于最大值。 如果是,则将max设置为arr [1]。第一个循环检查(12> 4)是否为max = 12

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

第三遍检查arr [3]是否大于最大值。 第三循环检查(8> 12)是否不是max = 12

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

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

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

第八行。 循环已完成,并且返回了max。 最多为56

下面是您的代码的三个步骤。

  1. 您的代码开始将数组中的第一个元素与下一个元素进行比较。
  2. 在if条件中,它检查最大值,如果条件为true,则以最大值(max)存储。
  3. 最后返回最大值。

所以我的建议是使用JavaScript内置的reduce方法。以下是原因。

or method will either fail or return the wrong result if the array has too many elements, because they try to pass the array elements as function parameters. 如果数组包含太多元素,则方法将失败或返回错误结果,因为它们试图将数组元素作为函数参数传递。

method which don't have this problem 所以使用没有问题的方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM