JavaScript数组while循环。比较结果:arr [len]与arr [len-1]

时间:2018-11-02 15:54:47

标签: javascript html

大家好!

我在此网站上找到了很棒的代码:

var points = [30,100];
document.getElementById("demo").innerHTML = myArrayMax(points);

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

来源:Find the min/max element of an Array in JavaScript

它确实非常好而且非常快。我有一个问题(出于好​​奇)。当我尝试添加(或操作)某些内容时,结果与第一个代码不符。这是代码:

var points = [30,100];
document.getElementById("demo").innerHTML = myArrayMax(points);

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

我假设array[0]是第一个数组元素,我也使用了递减后的函数,但是我没有得到预期的结果。

2 个答案:

答案 0 :(得分:1)

首先,使用arr[len-1]给混合添加了一个新问题:Index out of bounds。当循环迭代循环中的最后一个元素(在len == 0之后的len--时,您最终会寻找不存在的arr[-1]时,会发生这种情况。同样,您不再检查数组(arr[arr.length - 1])中的最后一个索引,因为len--已经从索引中减去了。像这样:

var points = [30,100];
document.getElementById("demo").innerHTML = myArrayMax(points);

function myArrayMax(arr) {
    var len = arr.length; // len == 2
    var max = -Infinity;
    while (len--) { // len == 1
      // checking for arr[len - 1] the first time
      // results in checking for arr[0]. arr[1] will be skipped
      if (arr[len-1] > max) { 
        max = arr[len-1];
      }
    }
    return max;
}

该功能首先运行良好,所以...为什么要修复未损坏的内容?

查看arithmetic operators,以获取有关len--的更多信息。

答案 1 :(得分:0)

.st0 {
    fill: #fff
}

.st5 {
    fill: #c32034
}

//而且,在上一次迭代时,您将获得索引超出限制的异常。