大家好!
我在此网站上找到了很棒的代码:
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]
是第一个数组元素,我也使用了递减后的函数,但是我没有得到预期的结果。
答案 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
}
//而且,在上一次迭代时,您将获得索引超出限制的异常。