使用JavaScript函数

时间:2016-02-22 20:05:50

标签: 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

5 个答案:

答案 0 :(得分:2)

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

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

上述方法适用于搜索 min / max https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

答案 1 :(得分:1)

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

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

第三行。启动一个for循环,它将从1开始并保持循环以获得arr数组的长度。

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

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

第二次检查arr [2]是否大于最大值。 第二循环检查是否(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

答案 2 :(得分:1)

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

  1. 您的代码开始将数组中的第一个元素与下一个元素进行比较。
  2. 如果条件为真,则在if条件下检查最大值并以最大值(max)存储。
  3. 最后返回最大值。
  4. 所以我的建议是使用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);
    

答案 3 :(得分:0)

reduce 的另一种用法:.reduce((a,c) => c > a ? c : a, 0)

答案 4 :(得分: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;