我不知道是否可能,但我想使用 Docxtemplater 在我的 React Native 中创建一个循环,但我想控制此循环在文档中重复的次数,具体取决于我的数组中的项目数,就好像它是 for 或 foreach。
这是我正在使用的代码的一部分:
//Array with the data that will be accessed,can reach a maximum of 12 items
export const collections = [
{name: 'item 1', unitMeasure: 'TRIP/UNIT', value: '100'}
{name: 'item 2', unitMeasure: 'TRAVEL', value: '200'}
{name: 'item 3', unitMeasure: 'UNIT', value: '300'}
{name: 'item 4', unitMeasure: 'TRIP/UNIT', value: '400'}]
}
//Code that will be used to create the loop in the document
doc.render({
"collect": [
{ name: collections[0].name, unit: collections[0].unitMeasure, value: collections[0].value},
{ name: collections[1].name, unit: collections[1].unitMeasure, value: collections[1].value},
{ name: collections[2].name, unit: collections[2].unitMeasure, value: collections[2].value},
{ name: collections[3].name, unit: collections[3].unitMeasure, value: collections[3].value},
])}
我的问题是我是否可以缩短这部分循环并执行类似于我在 C# 中所做的操作,如下所示:
for (int i = 0; i < collections.Length; i++)
{
name: collections[i].name, unit: collections[i].unitMeasure, value: collections[i].value
}
我尝试使用 for 和 foreach 但没有成功...
在 JavaScript 中,您可以使用
for
等数组方法实现与 map()
循环相同的迭代功能。使用 Docxtemplater 时,您通常不需要为每次迭代手动构建数据对象;相反,您可以直接传递整个数组作为模板渲染过程的上下文。以下是具体操作方法:
export const collections = [
{ name: 'item 1', unitMeasure: 'TRIP/UNIT', value: '100' },
{ name: 'item 2', unitMeasure: 'TRAVEL', value: '200' },
{ name: 'item 3', unitMeasure: 'UNIT', value: '300' },
{ name: 'item 4', unitMeasure: 'TRIP/UNIT', value: '400' }
];
// The actual code to render the document would look something like this:
doc.render({
collect: collections.map(item => ({
name: item.name,
unit: item.unitMeasure,
value: item.value
}))
});
在上面的例子中,我们使用
map()
方法将 collections
转换为 Docxtemplater 期望的格式。此过程会自动处理 collections
数组中任意数量的项目。
请确保您的 Docxtemplater 模板具有适当的循环语法。使用 Docxtemplater,您通常使用
{#tagName}
和 {/tagName}
语法在模板中定义循环。
例如,您的 Word 模板将包含以下内容:
{#collect}
Name: {name}
Unit Measure: {unit}
Value: {value}
{/collect}
当 Docxtemplater 使用
collect
数组提供的上下文处理此模板时,它将为数组中的每个对象重复 {#collect}
和 {/collect}
标签中的内容。