使用数组数组的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
的行为。问题陈述与此完全无关。