You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JavaScript循环变量传入${}模板语法?

如何在for循环中动态访问数组元素的属性?

嘿,我明白你的问题了——你想在JavaScript的for循环里用变量i来动态访问数组SALE_DATA.SALE_ORDER_ITEMS_LIST中对应元素的WEIGHT属性,但原来的写法行不通,对吧?

问题出在哪?

你原来的代码里,${SALE_DATA.SALE_ORDER_ITEMS_LIST[i].WEIGHT}是试图让后端模板引擎直接解析这个表达式,但此时i是JavaScript运行时的循环变量,后端渲染页面的时候根本不知道i的值,所以这种写法会直接报错,或者渲染出无效的内容。

正确的解决方案

我们需要先把后端的SALE_DATA整个转换成JavaScript可以直接操作的变量,然后在JS循环里用i来动态访问数组元素。具体做法如下:

<script>
// 先把后端的SALE_DATA转成JSON字符串,渲染成JS变量
const saleData = ${JSON.stringify(SALE_DATA)};

document.write("<table border=2 width=50%>");
for (var i = 0; i < saleData.SALE_ORDER_ITEMS_LIST.length; i++) {
    document.write("<tr>");
    // 现在用JS变量动态访问对应元素的WEIGHT属性
    document.write("<td>" + saleData.SALE_ORDER_ITEMS_LIST[i].WEIGHT + "</td>");
    document.write("<td>" + i + "</td>");
    document.write("</tr>");
}
document.write("</table>");
</script>

为什么这样能行?

JSON.stringify(SALE_DATA)会把后端的SALE_DATA对象转换成合法的JSON字符串,渲染到JS代码里后,就变成了一个JavaScript对象saleData。这样在JS循环运行时,就能用i作为索引,动态访问数组里的每一个元素及其WEIGHT属性了。

更优的写法(推荐)

其实document.write在现代前端开发中并不推荐,因为如果页面已经加载完成后调用它,会直接覆盖整个页面。更安全灵活的方式是用DOM操作来创建表格:

<script>
const saleData = ${JSON.stringify(SALE_DATA)};

// 创建表格元素并设置属性
const table = document.createElement('table');
table.setAttribute('border', '2');
table.style.width = '50%';

// 遍历数组生成行和单元格
saleData.SALE_ORDER_ITEMS_LIST.forEach((item, index) => {
    const row = table.insertRow();
    // 权重单元格
    const weightCell = row.insertCell();
    weightCell.textContent = item.WEIGHT;
    // 索引单元格
    const indexCell = row.insertCell();
    indexCell.textContent = index;
});

// 把表格添加到页面中
document.body.appendChild(table);
</script>

这种写法不仅避免了document.write的潜在问题,代码结构也更清晰,维护起来更方便。

内容的提问来源于stack exchange,提问作者V L Sudhakar Inampudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:19:15