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

如何使用JSON与Fetch/Async Await将数组数据填充到HTML下拉菜单

问题根因

你的推测完全正确,acessArray函数每次执行都会直接覆盖catList节点的全部HTML内容,循环时每一轮都会清空上一轮生成的下拉选项,最终只会保留最后一次遍历到的猫咪品种。

修复方案

调整逻辑,先拼接完所有下拉选项的HTML内容,再一次性写入DOM节点,避免重复覆盖。修改后的代码如下:

async function start(){
   try{
    const response = await fetch("https://api.thecatapi.com/v1/breeds");
    const data = await response.json();
    console.log(data);
    renderCatSelect(data);
   }catch (e){
    console.log("Error : "+ e);
   }
}
start();

function renderCatSelect(catBreeds){
    // 先拼接默认选项
    let optionsHTML = `<option value="Choose a cat">Choose a cat</option>`;
    // 遍历所有品种,拼接所有option
    catBreeds.forEach(breed => {
        optionsHTML += `<option value="${breed.id}">${breed.name}</option>`;
    });
    // 一次性写入完整的select结构
    document.getElementById("catList").innerHTML = `
    <select>
        ${optionsHTML}
    </select>
    `;
}

优化说明

  • 把原先的filterData和acessArray两个函数合并为单次渲染逻辑,减少了不必要的DOM操作,页面性能更好
  • 给option添加了对应的品种id作为value,方便后续提交或联动查询时使用

内容的提问来源于stack exchange,提问作者Divyajot Singh Dhanju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:03