gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:39:31 24 4
gpt4 key购买 nike

我有一个如下所示的 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>
))
);

关于reactjs - 如何在 React 中使用 map 输出嵌套对象的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70430992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com