2015-02-12 88 views

回答

1

Math.max返回它的两个参数的更大的代码。

.reduce对集合(数组)中的每个元素应用转换并返回一个值。

在这种情况下,这两个参数是先前的最大值和单元的当前值。因此,对于给定的行,遍历单元格(.reduce)并返回最大值cell.minHeight()


Array.prototype.map

Array.prototype.reduce

Math.max

1

试想一下,你有号码[31,10,23]矩阵,[20,5,1],[12, 31,41]]

rows.map(function (row) {})将遍历每个项目更新数组值与回调函数中返回的值。

实施例:在第一迭代中,我们有[31,10,23]

row.reduce(function (acumulated, current) {})将与两个参数(先前返回的值和从阵列当前项)被调用三次,将返回他们之间最大。

Math.max(0,31) = 31 
    Math.max(31,10) = 31 
    Math.max(31,23) = 31 // This is the returned value 

结果将是数字31.当它返回到映射函数时,它将被替换为主数组。所以它会是这样的:

[31,[20,5,1],[12,31,41]] 

和一切都会重复[20,5,1]和[12,31,41]。所有这些都将在所有交易结束时具有最大值。

[31,20,41] 
+0

这个解释很好。我想我现在明白了。 – PositivelyDoped 2015-02-12 12:17:52

2

我会解释由线这是什么一样行:) 1

1 function rowHeights(rows) { 
2   
3  return rows.map(function(row) { 
4    
5   return row.reduce(function(max,cell) { 
6    return Math.max(max, cell.minHeight()); 
7   },0); 
8    
9  }); 
10  
11 } 
  • 行:声明function rowHeights,这需要一个参数rows,一个2维数组。

  • 3行:rows阵列,其基本上要求内rows在每个阵列元件的功能和替换每个元件与所述函数调用

  • 第5行的返回值上的调用Array.prototype.map:在每个的子阵列(行)rows中调用Array.prototype.reduce,该函数调用每个元素上的函数以将子数组减少为单个元素。

  • 第5行:请注意,此功能有两个参数,maxcell。认为这些价值观为previouscurrent值现在

  • 6号线:比较使用Math.max当前(cell参数)值之前的(max参数)值。返回两者中的较高者。

  • 第7行:Array.prototype.reduce的第二个参数设置为0。这意味着在第一次迭代中,max的初始值是0

基本上,这样做是通过rows阵列中的每个row子阵列回路。在每次迭代中,它将前一次迭代max返回的值与当前值进行比较。如果当前值比前一个值大,则返回新的maxmax初始设置为0.一旦reduce函数完成,它将row子数组替换为最大数值的值。

此功能可以也可以写成:

function rowHeights(rows) { 
    var newRowsArray = []; 

    for (var i = 0, tmp = 0; i < rows.length; i++, tmp = 0) { 
     for (var j = 0; j < rows[i].length; j++) { 
      tmp = Math.max(tmp, rows[i][j]); 
     } 
     newRowsArray.push(tmp); 
    } 

    return newRowsArray; 
} 
0

我要保持这种解释很简单。

Math.max(1, 5)返回本例中最大的数字5。

传递前面的结果基本上都是通过一个数组来经过。例如:

[1,2,3,4,5].reduce(function (prevNum, currentNum) { 
    return {{number to send to the next iteration as prevNum}}; 
}); 

所以,如果你把两者结合起来,减少将通过每一个数字数组中,并返回发现的最大数量。

[1,2,3,4,5].reduce(function (prevNum, currentNum) { 
    return Math.max(prevNum, currentNum); 
}); 

映射将经过一个数组并创建一个新的数组,每个索引都是传递函数的返回值。

[1,2,3,4,5].map(function (currentNum) { 
    return currentNum + 1; 
}); 
// this would return [2,3,4,5,6] because I added 1 to each number in the array 

在从书的例子中,在使用map每一行rowHeights功能基本上迭代,并且使用reduce返回单元的行的最大高度在表中。这个结果基本上是一个最大高度的数组,我假设它将用于设置每行的最小高度,如作者所述。

0

它将每行的最大值作为数组返回。这些是等同的陈述:

Math.max(1,2,36,9) 
Math.max.apply(Math,[1,2,36,9]) 
[1,2,36,9].reduce(function(mx,c) { return Math.max(mx,c); }) 

第一条语句很容易理解。它返回这4个数字的最大值(即36)。现在,以下每一个陈述都变得越来越复杂,但要做的与第一个完全相同。

相关问题