reactjs - 如何在 React 中使用 map 输出嵌套对象的内容?

我有一个如下所示的 json

const assessmentData = [
    {
        "Sit1": [
            {
                "rule": "Rule1",
                "type": "High"
            }
        ]
    },
    
    {
        "Sit2": [
            {
                "rule": "Rule6",
                "type": "Low"
            }
        ]
    },
    
    {
        "Sit3": [
            {
                "rule": "Rule3",
                "type": "High"
            }
        ]
    }
]

现在我想呈现一些包含上述信息的 html。通常在 vanilla HTML 中,这就是我所做的

let content = ""

for(let i=0; i < assessmentData.length; i++) {
    for (const [key, value] of Object.entries(assessmentData[i])) {
        content += `<h2>${key}<h2>`
        for (const [subkey, subvalue] of Object.entries(value)) {
            const rule = subvalue["rule"]
            content += `<h3>${rule}</h3>`
        }
    }   
}

所以最终的输出看起来像

<h2>Sit1<h2><h3>Rule1</h3><h2>Sit2<h2><h3>Rule1</h3><h2>Sit3<h2><h3>Rule1</h3>

但是我不能使用 map 功能做同样的事情。所以我在 react 中的代码看起来像

const CreateTemplate = (assessmentData) => {

     const content = assessmentData.map((item, idx) => {
        Object.keys(item).map((subitem, subindex) => {
            <h2>{subitem}</h2>
            Object.keys(item[subitem]).map((subitem2, subindex2) => {
                <h3>{item[subitem][subitem2]["rule"]}</h3>
            })
            
        })
               
     
      });


     return (
        <div>Content</div>
        {content}
     )
}

export default CreateTemplate

它不输出content 部分。我做错了什么?

最佳答案

您应该从 map 回调中返回值。 * 您还可以使用 Object.entries 映射键值对数组。由于该值已经是一个数组,因此您不需要使用键,A.K.A.数组索引,您可以简单地映射数组值。

const content = assessmentData.map((item, idx) => {
  return Object.entries(item).map(([key, value], subindex) => {
    return (
      <React.Fragment key={subindex}>
        <h2>{key}</h2>
        {value.map((subitem2, subindex2) => {
          return <h3 key={subindex2}>{subitem2.rule}</h3>
        })}
      </React.Fragment>
    );
  });
});

* 我尝试匹配所有括号,但希望您的 IDE 比我在纯文本编辑器中做的更好

或者使用隐式箭头函数返回:

const content = assessmentData.map((item, idx) =>
  Object.entries(item).map(([key, value], subindex) => (
    <React.Fragment key={subindex}>
      <h2>{key}</h2>
      {value.map((subitem2, subindex2) => (
        <h3 key={subindex2}>{subitem2.rule}</h3>
      ))}
    </React.Fragment>
  ))
);

https://stackoverflow.com/questions/70430992/

相关文章:

android - 我们如何保存和恢复 Android StateFlow 的状态?

javascript - Typescript reducer 的 switch case type

c++ - 无法构建 Boost Spirit 示例 conjure2

java - ThreadPoolExecutor.shutdownNow() 没有在 Thread

python - pandas mysql 如何使用 Dataframe 更新某些行列

typescript - 数组中泛型的联合

python - 是否可以在 discord.py 中对不同的前缀使用不同的命令?

c# - 在 Visual Studio 中替换后删除空行

algorithm - 加权图的最短路径,但权重有点特殊

ruby-on-rails - 无法使用 octokit 连接到 Github 帐户