如何理解以下代码的逻辑?

时间:2018-07-22 12:25:37

标签: javascript

这是代码。有人可以帮助我理解其背后的逻辑吗?

function myArrayMax(arr) {
    var len = arr.length;
    var max = -Infinity;
    while (len--) {
      if (arr[len] > max) {
        max = arr[len];
      }
    }
    return max;
}

3 个答案:

答案 0 :(得分:2)

该算法只是在计算数组的最大值。

var len = arr.length; 

在这里获得数组中元素的数量

var max = -Infinity;

您将初始值设置为-infinity以确保即使负值也可以是最大

 while (len--) {

当len不为0时进行迭代。检查后,将len减去1。

 if (arr[len] > max) {

检查arr[len]处的值是否大于当前最大值

max = arr[len];

如果值较大,请为arr[len]分配较大的值(max

return max;

返回数组的最大值(最大值)

答案 1 :(得分:1)

棘手的部分

-Infinity始终小于任何值,因此每个项目都将更大,对于空数组,该函数将返回该值。

len--是反向数组循环,它首先检查该值是否为true,其中除0以外的其他任何数字均为true,然后将其减小。因此它将与数组中的索引匹配(因为最后一个元素的长度为1)。如果该值为0,它将停止循环。

答案 2 :(得分:1)

action="return false;"

此函数返回数组中的最大数目。但是,实现这一目标的一种更简单的ES2015方法是使用新的传播算子。

function myArrayMax(arr) {
    var len = arr.length - 1;
    var max = Number.NEGATIVE_INFINITY; //any number will be bigger than negative infinity 
    //loop begins from the end of the array 
    while (len--) { //loop on all elements until len = 0 i.e last element
      if (arr[len] > max) { //check if current element is bigger than stored maximum number
        max = arr[len];
      }
    }
    return max;
}