JavaScript使用forEach遍历JSON数据渲染到HTML时显示异常如何解决?
现有代码问题梳理
- 接口返回的
data是对象结构,而非数组,直接调用数组方法forEach会直接抛出语法错误 - 外层遍历逻辑即使修正后,内层
Object.entries传入的是全局data而非当前遍历的单个产品对象,无法正确读取单条产品的属性 - 当前HTML只有一组展示容器,多产品数据遍历时会反复覆盖DOM内容,最终仅能展示最后一条数据
1day字段存在重复判断,第一条判断逻辑为空,第二条判断永远无法触发,且取值时误用全局data而非当前产品对象取值
修复后的代码
HTML代码
新增列表容器,支持多产品渲染:
<!-- 产品列表容器 --> <div id="productList"></div>
JS代码
async function fetchData() { const response = await fetch('https://assets.cmcmarkets.com/json/cmc-test-most-popular-feed.json'); const data = await response.json(); const productList = document.querySelector('#productList'); // 遍历对象的所有值,每个值对应一个产品对象 Object.values(data).forEach(product => { // 动态生成单产品DOM结构 const productEl = document.createElement('div'); productEl.className = 'product-item'; productEl.innerHTML = ` <div class="name">Name: ${product.name}</div> <div class="code">Code: ${product.code}</div> <div class="spread">Spread: ${product.spread}</div> <div class="cellA"> <div>movement: ${product['1day'].movement}</div> <div>price: ${product['1day'].price}</div> </div> <hr> `; productList.appendChild(productEl); }); } fetchData();
核心修改说明
- 改用
Object.values(data)获取所有产品对象组成的数组,再用forEach遍历,解决对象无法调用数组方法的问题 - 直接操作单个产品对象
product取值,避免嵌套遍历属性的冗余逻辑 - 动态生成每个产品对应的DOM节点插入列表容器,避免多数据覆盖问题
- 简化
1day字段的取值逻辑,直接从当前产品对象读取对应属性,解决字段不展示的问题
内容的提问来源于stack exchange,提问作者user173420
相关产品推荐
相关产品推荐

