我在JavaScript中有一个对象数组,我想遍历这些对象并返回其中包含引导程序类的JSX,这样每行始终在其中显示2列。
options: [
{
"letter":"A",
"text": "14 March 1879"
},
{
"letter":"B",
"text": "14 March 1897"
},
{
"letter":"C",
"text": "24 May 1879"
},
{
"letter":"D",
"text": "24 June 1879"
}
]
根据我在其他语言和模板引擎上的经验,这非常简单:您只需使用类div
创建一个开始row
和结束2
标签,然后使用模板引擎进行循环遍历并渲染每个对象,直到循环的计数器为<div class="row">
for (var i in options) {
if(i%2 === 0) {
<!-- render object ... -->
</div><!-- then end this row -->
<div class="row"><!-- start new row -->
} else {
<!-- render object -->
}
}
</div>
,您就可以动态结束该角色并开始一个新的角色。
类似这样的东西:
<div class="row">
<div class="col-md-6">
<div class="option correct-option">
A <!-- that is, option.letter -->
</div>
</div>
<div class="col-md-6">
<div class="option wrong-option">
B <!-- that is, option.letter -->
</div>
</div>
</div>
我在地图函数中尝试了此方法,它给出了语法错误,因为在条件通过的情况下返回的值不是有效的JSX。
感谢您的帮助。
编辑:
最后,我要实现的是:
如果对象数组包含2个对象,我应该能够像这样动态显示它:
<div class="row">
<div class="col-md-6">
<div class="option correct-option">
A <!-- that is, option.letter -->
</div>
</div>
<div class="col-md-6">
<div class="option wrong-option">
B <!-- that is, option.letter -->
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="option correct-option">
C <!-- that is, option.letter -->
</div>
</div>
</div>
如果数组包含3个对象,我想实现这一目标:
{{1}}
答案 0 :(得分:2)
这样的事情怎么样?
{options.map((option, i) => (
i % 2 === 0 ? null : ( // skip every 2nd row
<div class="row">
A: {option}
B: {i < options.length ? options[i + 1] : null}
</div>
)
)}
答案 1 :(得分:0)
您可以使用常规i
for循环增加每个循环2个,并检查第二个选项是否设置为照顾长度不均的数组:
示例
function App() {
const content = [];
for (let i = 0; i < options.length; i += 2) {
content.push(
<div class="row">
<div class="col-md-6">
<div class="option correct-option">{options[i].text}</div>
</div>
{options[i + 1] && (
<div class="col-md-6">
<div class="option correct-option">{options[i + 1].text}</div>
</div>
)}
</div>
);
}
return <div>{content}</div>;
}