我有这个函数,目的是找到一个数组中的最大(数字)元素,该值来自一个参数。我很难理解逻辑,我老了又慢了,所以请原谅我。能否请您解释下面代码的内容。
function max(arr){
var max = arr[0];
for(var i=1; i<arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
max([4,12,3,8,0,22,56]); //output is 56
答案 0 :(得分:2)
在进行循环之前,函数接受第一个数组元素的值作为“起始”(初始)最大值。该值为4
。
在每次循环迭代中,将每个数组值与初始“最大值”进行比较。
如果当前值大于先前的最大值 - 该当前值将覆盖它并成为最大值。
但是......有更简单,更好的方法:使用内置的Javascript对象,比如Math
。
请考虑以下最大值搜索:
var arr = [4,12,3,80,0,22,56];
var max = Math.max.apply(null, arr);
console.log(max); // 80
上述方法适用于搜索 min / max 值 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
答案 1 :(得分:1)
第一行。 max函数传递给数组[4,12,3,8,0,22,56],
第二行。 max variable设置为数组中的第一项。最大值是4,
第三行。启动一个for循环,它将从1开始并保持循环以获得arr数组的长度。
第四行。检查当前数组值是否大于最大值。
所以,第一次检查arr [1]是否大于max。如果是,则将max设置为arr [1] 第一循环检查是否(12> 4)它是如此max = 12
第二次检查arr [2]是否大于最大值。 第二循环检查是否(3> 12)不是这样max = 12
第三次检查arr [3]是否大于最大值。 第三循环检查是否(8> 12)不是这样max = 12
第四次检查arr [4]是否大于最大值。 第四循环检查是否(0> 12)不是这样max = 12
第五次检查arr [5]是否大于最大值。 第五循环检查是否(22> 12)它是如此max = 22
第六次检查arr [6]是否大于最大值。 第六循环检查是否(56> 22)它是如此max = 56
第八行。循环已完成并返回max。最大值是56
答案 2 :(得分:1)
以下是您的代码的三个步骤。
所以我的建议是使用JavaScript内置的reduce方法。原因就在这里。
如果数组元素太多,Math.max.apply 或 apply 方法将失败或返回错误的结果,因为它们尝试将数组元素作为功能参数。
所以使用 reduce 方法没有这个问题
var arr = [2,4,6];
var max = arr.reduce(function(a, b) {
return Math.max(a, b);
});
console.log(max);
答案 3 :(得分:0)
reduce 的另一种用法:.reduce((a,c) => c > a ? c : a, 0)
答案 4 :(得分:0)
就我而言,必须找到所有最大值,
var max = -Infinity, result = [];
for (var i = 0; i < arr.length; ++i) {
if (arr[i] < max) continue;
if (arr[i] > max) {
result = [];
max = arr[i];
}
result.push(max);
}
return result; // in case of number of occurrences of max values return result.length;