我在下面概述了freeCodeCamp问题的解决方案,我想检查我对array.reduce()如何工作的逻辑/理解。
function largestOfFour(arr) {
// Created bigArray[]; as an empty container to push the largest number into.
var bigArray = [];
for(var i = 0; i < arr.length; i++){
bigArray.push(arr[i].reduce(function(a, b) {
return Math.max(a, b);
}));
}
return bigArray;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
因此,reduce()调用的函数返回a和b之间的最大值。
a是初始值,因为我没有传递初始值,所以它是0,而4是当前值,即b。显然4大于0,此时,Math.max = 4。
then a = 4 and b = 5, then Math.max = 5
then a = 5 and b = 1, then Math.max = 5
then a = 5, and b = 3, then Math.max = 5
在遍历数组中的每个数字后,使用push()将5推入bigArray []。
bigArray.push(arr[i].reduce(function(a, b){return Math.max(a, b);}));
//arr[0] is now arr[4, 5, 1, 3]
arr[0].reduce(function(a, b){return Math.max(0, 4);}));
//Math.max returns 4
arr[0].reduce(function(a, b){return Math.max(4, 5);}));
//Math.max returns 5
arr[0].reduce(function(a, b){return Math.max(5, 1);}));
//Math.max returns 5
arr[0].reduce(function(a, b){return Math.max(5, 3);}));
//Math.max returns 5
在上述逻辑之后,5得到'push()'到bigArray和bigArray = [5]。
只需检查我的逻辑并理解我自己的代码。
答案 0 :(得分:1)
只需检查我的逻辑并理解我自己的代码。
需要稍作修正。
在第一次迭代比较不在0
和4
之间,在4
和5
看一下演示
[4, 5, 1, 3].reduce(function(a, b) {
console.log(a, b)
return Math.max(a, b);
})
&#13;
输出
4 5
5 1
5 3
所以,只有3次迭代,看看这个documentation。迭代次数 n - 1 , n 是项目数。