今天是个好日子!
我从这个网站找到了这个很棒的代码:
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]
是第一个数组元素,我也使用了后递减函数,但我没有得到预期的结果。
首先,使用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--
。
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;
}
//此外,在最后一次迭代中,您将获得索引超出绑定的异常。