这是代码。有人可以帮助我理解其背后的逻辑吗?
function myArrayMax(arr) {
var len = arr.length;
var max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
答案 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;
}