【问题标题】:How do I map for every two elements for react?如何为每两个元素映射以进行反应?
【发布时间】:2020-11-02 22:19:04
【问题描述】:

假设我有一个如下所示的数组:

const array = [0, 1, 2, 3, 4, 5, 6, 7]

我正在尝试对 .map 函数中的每 2 个对象进行迭代,但它需要在我的渲染中看起来像这样(注意我使用的是 React Bootstrap):

<Row>
<Col>array[0]</Col>
<Col>array[1]</Col>
</Row>


<Row>
<Col>array[2]</Col>
<Col>array[3]</Col>
</Row>

等等……

所以对于每 2 个对象,它需要有自己的行,然后在关闭 Row 之前渲染这 2 个对象,如果它有更多元素则开始新 Row。

实现这一目标的最佳方法是什么?

【问题讨论】:

标签: javascript arrays reactjs react-bootstrap


【解决方案1】:

简短回答

转换模型,然后注入视图。

详细解答

您需要根据需要将数组转换为矩阵:

const array = [0, 1, 2, 3, 4, 5, 6, 7]

const rows = array.reduce(function (rows, key, index) { 
    return (index % 2 == 0 ? rows.push([key]) 
      : rows[rows.length-1].push(key)) && rows;
  }, []);
  
console.log(rows)

现在,您的模型已转换为这种格式

[ [0, 1] , [2, 3] , [4, 5] , [6, 7] ]

现在嵌套循环应该优雅地完成这项工作:

rows.map(row => ( 
  <Row >
  { row.map(col => (<Col>{col}</Col>)) }
  </Row>
))

注意事项:

这个优雅的解决方案背后的工程是准备你的模型,然后你循环。

不确定,当组件在循环中渲染时,React 是否仍然需要 id in(例如:&lt;Compo id=""&gt;)..

【讨论】:

  • 这看起来和我需要的完全一样!我只是想理解它。 index % 2 == 0 是什么意思?
  • @AndrewBautista 它将数组创建为一个二维数组,内部数组中有 2 个项目。如果太令人困惑,您可以使用此问题的任何答案:Split array into chunks
  • @AndrewBautista 所以你问的是 `index % 2 == 0`.. 实际上,我们想将每 2 个连续的元素组合在一起......这意味着如果当前迭代在 (index= 0 ), (index=0) & (index=1) 将被组合在一起.. 但是,下一次迭代会将我们放入 (index=1) 中,而 (index=1) 已经处理了.. 所以我们需要跳过它。一般情况下,我们需要跳过迭代(1、3、5、...)。它们之间的共同点是(索引% 2 == 1)。知道了!跳过 (index % 2 == 1) 意味着我们想要 (index % 2 == 0) 并且 X%2 没有其他值。顺便说一句,X%Y 是 X 除以 Y 的余数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2021-01-19
  • 1970-01-01
  • 2020-07-18
  • 2017-11-17
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多