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

问题描述 投票:0回答:2

今天是个好日子!

我从这个网站找到了这个很棒的代码:

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]是第一个数组元素,我也使用了后递减函数,但我没有得到预期的结果。

javascript html
2个回答
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--


0
投票
function myArrayMax(arr) {
var len = arr.length;
var max = -Infinity;
while (len--) { // here itself you are decrementing the value of len
  if (arr[len-1] > max) { // here also you are checking the previous one. Then you won't get chance to check the last array element.
    max = arr[len-1];
  }
}
return max;
}

//此外,在最后一次迭代中,您将获得索引超出绑定的异常。

© www.soinside.com 2019 - 2024. All rights reserved.