【问题标题】:Loop through 2D array in React在 React 中循环遍历二维数组
【发布时间】:2019-02-04 16:43:47
【问题描述】:

我对 React 很陌生,所以我想问你,是否有任何方法可以在 React 中循环遍历 2D 数组。

二维数组示例:

const db = {
    "1": {
        "1": "aaa",
        "2": "bbb",
        "3": "ccc"
    },            
    "two": {
        "1": "ddd",
        "2": "eee"
    }
};

我的伪代码:

for(i = 1; i < db.lenght; i++){
     for(j = 1; j < db[i].lenght; j++){
          console.log(db[i][j]);
     }
}

但我不知道如何在 React 中渲染它,例如在 &lt;ul&gt; 标签中。

【问题讨论】:

  • 循环就是循环...该代码是有效的javascript,因此反应没有区别...您的意思是如何循环和呈现反应中的值?
  • 是的,例如进入
      ,我会更新问题。
  • @DanoSVK db 不是数组。它是一个对象。请更正您对问题的表述。遍历对象实体是完全不同的。

标签: javascript arrays reactjs loops


【解决方案1】:

在 React 中,通常使用 Array#map 之类的数组方法。在你的 React 组件代码中,如果 outerArray 是一个数组数组,你可以这样处理它:

return (
    <ul>
        {outerArray.map((innerArray) => (
            <li>
                {innerArray.map((item) => <li>{item}</li>)}
            </li>
        ))}
    </ul>
);

【讨论】:

    【解决方案2】:

    您可以如下迭代db 对象,并将它们显示在列表中。

    const db = {
      "1": {
        "1": "aaa",
        "2": "bbb",
        "3": "ccc"
      },
      two: {
        "1": "ddd",
        "2": "eee"
      }
    };
    
    function App() {
      return (
        <ul className="App">
          {Object.keys(db).map(keyOuter => {
            return Object.keys(db[keyOuter]).map(keyInner => {
              return (
                <li key={`${keyInner}-${keyOuter}`}>{db[keyOuter][keyInner]}</li>
              );
            });
          })}
        </ul>
      );
    }
    
    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    
    
    <div id="root"></div>

    【讨论】:

    • @DanoSVK 你明白上面的代码是怎么回事了吗?否则,请提出问题。
    • 提出问题?你的措辞让我很敏锐。 :)
    • 需要注意的是,遍历对象键的顺序是任意的。如果您想以定义的顺序呈现实体,您必须在将数据源设为数组之前对键进行排序。
    • 晚安!
    • 是的,我明白 :) 它就像嵌套的地图功能。我只是想知道项目的顺序是否与@trixn 所说的数组中的顺序相同。
    【解决方案3】:

    这很简单。在循环中返回这样的列表:

    <li>{db[i][j]}</li>
    

    myList() {
      let list = []
      for(i = 1; i < db.lenght; i++){
         for(j = 1; j < db[i].lenght; j++){
              console.log(db[i][j]);
           list.push(<li key={i+'-'+j}>{db[i][j]}</li>)
           // when rendering list of array elements, wee need unique key
         }
      }
      return list
    }
    
    render() {
      return <ul>{this.myList()}</ul>
    }
    

    【讨论】:

    • 谢谢,如果我的索引之一是字符串而不是数字会发生什么(更新问题)?
    • 谢谢,那太好了,但还有一个问题,正如我所说,如果我的第二个索引是字符串而不是数字会发生什么?在那种情况下该怎么办?
    • javascript 和 react 没什么区别。想想会发生什么,那么你可能会更好地培养你的编程技能。尝试做更多的努力。这就是我建议你遵循的。回答:您需要使用其他内置功能,如地图。你可以关注@arup 的回答。
    【解决方案4】:

    使用Array.prototype.map()循环遍历jsx内部的数组是最简单的:

    render() {
        return (
            <ul>
                {db.map(entries => (
                    <li>
                        <ul>
                            {entries.map(entry => (
                                <li>{entry}</li>
                            ))}
                        </ul>
                    </li>
                ))}
            </ul>
       );
    }
    

    【讨论】:

    • @ArupRakshit OP 写道,它是一个数组,也可以从他的循环构造方式中看出。循环这样的对象是行不通的。 “对象”可能正是控制台日志提供给 OP 的内容。这看起来像一个对象,而它是一个数组。
    • 检查const db = {.. OP没有正确解释它,可能对JS来说很新,所以OP无法控制JS中的术语。通过查看编码风格,花更多时间在 JS 中的人将衡量提问者的熟练程度,以及作为回答者我们应该提供的一点帮助.. :)
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2021-11-03
    • 2018-11-02
    相关资源
    最近更新 更多