【问题标题】:iterate over zip iterable to produce multiple rows in table - Reactjs迭代 zip 可迭代以在表中生成多行 - Reactjs
【发布时间】:2021-07-23 00:55:04
【问题描述】:

我有一个数组数据库,我想解压并插入到表中。

例如,我将有一个名为 a=[1,2,3,4]b=['a','b','c','d'] 的数组,每个数组的长度相等。

我会有一个只有标题的表格

a b

我生成的数组是 [[1,'a'],[2,'b'],[3,'c'],[4,'d']] 使用 underscore 包中的 zip 函数创建。

我的目标是遍历这个数组并生成以下内容

a b
1 'a'
2 'b'
3 'c'
4 'd'

目前,我有一个

function returnIt(){
        let _ = require('underscore')
        //returns [[1,'a'],[2,'b'],[3,'c'],[4,'d']] so x[0] = 1 and x[1] = 'a'
        for (var x of _.zip([1,2,3,4],['a','b','c','d'])){
            return (
                <>
                    <td>
                        {x[0]}
                    </td>
                    <td>
                        {x[1]}
                    </td>
                </>
            )
        }
return(
    <table>
        <thead>
            <tr>
                <th>a</th>
                <th>b</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                {returnIt()}
            </tr>
        </tbody>
    </table>
)

但这不起作用。我明白了


如您所见,我只得到一行,代码不会产生超过一行!很抱歉标题,我尝试尽可能多地更改我的程序以适应你的眼睛。

无论如何,这是我的结果,我可以改变什么?

【问题讨论】:

  • &lt;tr&gt;&lt;div&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/div&gt;&lt;/tr&gt; 是无效标记(很可能是输出的来源)
  • @Andreas 是的,它是一个问题的根源,间距。但我仍然只能生产一行。
  • 提示:return 做什么?
  • @Andreas 返回一个值?

标签: javascript html reactjs html-table


【解决方案1】:

returnIt 中,您的 for 循环在代码块中返回,因此它只会运行一次并返回您已转换为 html 元素的第一对数组元素。尝试将压缩元素的 映射 返回到标记片段。然后你会看到它们。

这是一个完整的例子:

import _ from "underscore";

export default function App() {
 
  return(
  <table>
      <thead>
          <tr>
              <th>a</th>
              <th>b</th>
          </tr>
      </thead>
      <tbody>
          
              {returnIt()}

      </tbody>
  </table>)

}

function returnIt(){
  //returns [[1,'a'],[2,'b'],[3,'c'],[4,'d']] so x[0] = 1 and x[1] = 'a'
  let zipped = _.zip([1,2,3,4],['a','b','c','d'])
  return zipped.map(pair => {
      return (
          <tr>
              <td>
                  {pair[0]}
              </td>
              <td>
                  {pair[1]}
              </td>
          </tr>
      )
  })
}

【讨论】:

  • 好的,我现在明白了很多。问题是,它永远不会进入下一行。
  • 太棒了!没想到!
【解决方案2】:

假设这是使用 React

return (
                <>
                    <td>
                        {x[0]}
                    </td>
                    <td>
                        {x[1]}
                    </td>
                </>
            )

&lt;td&gt; 应该是&lt;tr&gt; 的直系后代

【讨论】:

  • 抱歉,忘记添加该标签。这也有效,但遗憾的是它不能解决我的单行问题。
【解决方案3】:

问题是你从循环体返回。所以它只会到达第一个元素。

for (anything) {
   return ...
}

无论括号之间是什么,都会立即返回而不继续循环。

您需要让循环构建 HTML 并一次返回所有行,或者可能使用生成器函数之类的东西并将循环添加到 调用该函数的位置。

假设您使用的框架允许您只使用 return 这样的未引用 HTML,那么返回值的表格部分的问题可能是您不能在 &lt;tr&gt; 和其随附的&lt;td&gt;s 之一。

【讨论】:

  • 这真的值得回答吗?为什么不只是近距离投票?
猜你喜欢
  • 2019-06-03
  • 2015-07-23
  • 2018-05-16
  • 2020-06-29
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2020-11-01
  • 2019-02-14
相关资源
最近更新 更多