使用数组数组的JavaScript reduce()方法行为

使用数组数组的JavaScript reduce()方法行为,javascript,arrays,Javascript,Arrays,我有下一个数组: [ [ {inner: {text: ["name"]}}, {inner: {text: ["height"]}}, {inner: {text: ["country"]}} ], [ [ {text: ["Kilimanjaro"]}, {text: ["5895"]}, {text: ["Tanzania"]} ], [ {text: ["Everest"]}, {text: ["8848"]}, {text: ["Nepal"]} ],

我有下一个数组:

[ 
  [ {inner: {text: ["name"]}}, {inner: {text: ["height"]}}, {inner: {text: ["country"]}} ],
  [
    [ {text: ["Kilimanjaro"]}, {text: ["5895"]}, {text: ["Tanzania"]} ],
    [ {text: ["Everest"]}, {text: ["8848"]}, {text: ["Nepal"]} ],
    [ {text: ["Mount Fuji"]}, {text: ["3776"]}, {text: ["Japan"]} ],
    [ {text: ["Mont Blanc"]}, {text: ["4808"]}, {text: ["Italy/France"]} ],
    [ {text: ["Vaalserberg"]}, {text: ["323"]}, {text: ["Netherlands"]} ],
    [ {text: ["Denali"]}, {text: ["6168"]}, {text: ["United States"]} ],
    [ {text: ["Popocatepetl"]}, {text: ["5465"]}, {text: ["Mexico"]} ],
  ]
]
“内部”和“文本”是两个构造函数的实例。到目前为止相当简单

我还有下一个处理该数组的函数:

function rowHeights(rows) {
  return rows.map(function(row) {
    return row.reduce(function(max, cell) {
      return Math.max(max, cell.minHeight());
    }, 0);
  });
}
minHeight()
如果从“内部”调用,则只返回数组的长度+1。或者,如果从“text”调用,则仅为数组的长度

让我向您展示我期望该函数如何工作:

rows[ 
  row[0][ {inner: {text: ["name"]}}, {inner: {text: ["height"]}}, {inner: {text: ["country"]}} ],
  row[1][
    reduce[0][ {text: ["Kilimanjaro"]}, {text: ["5895"]}, {text: ["Tanzania"]} ],
    reduce[1][ {text: ["Everest"]}, {text: ["8848"]}, {text: ["Nepal"]} ],
    reduce[2][ {text: ["Mount Fuji"]}, {text: ["3776"]}, {text: ["Japan"]} ],
    and so on...[ {text: ["Mont Blanc"]}, {text: ["4808"]}, {text: ["Italy/France"]} ],
    [ {text: ["Vaalserberg"]}, {text: ["323"]}, {text: ["Netherlands"]} ],
    [ {text: ["Denali"]}, {text: ["6168"]}, {text: ["United States"]} ],
    [ {text: ["Popocatepetl"]}, {text: ["5465"]}, {text: ["Mexico"]} ],
  ]
]
这就是它的实际工作原理:

rows[ 
  row[0][ {inner: {text: ["name"]}}, {inner: {text: ["height"]}}, {inner: {text: ["country"]}} ],
  row[1][
    [reduce[0] {text: ["Kilimanjaro"]},reduce[1] {text: ["5895"]},reduce[2] {text: ["Tanzania"]} ],
    [reduce[0] {text: ["Everest"]},reduce[1] {text: ["8848"]},reduce[2] {text: ["Nepal"]} ],
    [and so on... {text: ["Mount Fuji"]}, {text: ["3776"]}, {text: ["Japan"]} ],
    [ {text: ["Mont Blanc"]}, {text: ["4808"]}, {text: ["Italy/France"]} ],
    [ {text: ["Vaalserberg"]}, {text: ["323"]}, {text: ["Netherlands"]} ],
    [ {text: ["Denali"]}, {text: ["6168"]}, {text: ["United States"]} ],
    [ {text: ["Popocatepetl"]}, {text: ["5465"]}, {text: ["Mexico"]} ],
  ]
]
rowHeights
的结果是:

[2, 1, 1, 1, 1, 1, 1, 1]
我理解第一个要素。它比较第一个数组的3个元素并返回2

我的问题出现在它开始使用第二个数组时

关于
reduce()
rowHeights()
,我理解错了什么


另外,这是一个来自于雄辩的Javascript第二版书的例子。如果您想查看完整代码,请单击。

我不确定是否理解。将
row.reduce
替换为
row.flat()。reduce
可以解决您的问题吗?注意:我认为整个构造函数和
minHeight
方法对于您的问题来说是一个复杂的问题,您最好删除它,我觉得它与您的问题无关。尽量把问题简化到最简单的程度,也许只是用整数数组。@trincot不,我不想改变任何东西,我只是想了解为什么它会这样工作我不同意。本教程描述了头行与其他数据行同级的数组,而不是输入数组中的头行。查看其中的
return[headers].concat(body)。这是一个二维阵列,而不是三维阵列。不客气。我认为这个问题可以关闭或删除,因为没有人会搜索
concat
的行为。问题陈述与此无关。我不确定我是否理解。将
row.reduce
替换为
row.flat()。reduce
可以解决您的问题吗?注意:我认为整个构造函数和
minHeight
方法对于您的问题来说是一个复杂的问题,您最好删除它,我觉得它与您的问题无关。尽量把问题简化到最简单的程度,也许只是用整数数组。@trincot不,我不想改变任何东西,我只是想了解为什么它会这样工作我不同意。本教程描述了头行与其他数据行同级的数组,而不是输入数组中的头行。查看其中的
return[headers].concat(body)。这是一个二维阵列,而不是三维阵列。不客气。我认为这个问题可以关闭或删除,因为没有人会搜索
concat
的行为。问题陈述与此完全无关。