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

如何从ads对象数组随机选单个对象展示?现有代码误显示全部对象

如何从ads数组中展示单个随机广告

问题核心原因

你的代码存在两个关键错误,导致最终展示所有广告而非单个随机广告:

  • 数组访问错误:你传入的data是包含ads数组的顶层JSON对象,直接使用data.length会得到undefined,实际应该通过data.ads获取广告数组。
  • 循环逻辑完全错误:你写的for (let i = 0; i = Math.floor(Math.random() * data.length); i++)是赋值操作而非条件判断,这会让循环持续执行(随机索引值为真值),最终遍历了所有广告项。

修复后的完整代码

fetch("src/js/_ads.json")
  .then(function (response) {
    return response.json();
  })
  .then(function (data) {
    appendData(data);
  })
  .catch(function (err) {
    console.log('error: ' + err);
  });

function appendData(data) {
  // 获取正确的广告数组
  const ads = data.ads;
  // 生成单个随机索引,范围覆盖数组所有元素
  const randomIndex = Math.floor(Math.random() * ads.length);
  // 取出随机选中的广告对象
  const randomAd = ads[randomIndex];

  // 提取广告对象的属性
  const adLink = randomAd.adLink;
  const adDesc = randomAd.adDescription;
  const adLogo = randomAd.adLogo;
  const adCompany = randomAd.adCompany;
  const adBackground = randomAd.adBackgroundColor;

  // 渲染广告内容
  document.querySelector("#ad-block").innerHTML += `
    <a href="${adLink}" target="_blank" id="ad-click">
      <div class="ad__banner ad__banner--dark ad__banner--column">
        <div class="ad__image" style="background-color: ${adBackground}">
          <img src="${adLogo}" alt="sponsored by ${adCompany}">
        </div>
        <div class="ad__desc">
          <div class="ad__tagline">${adDesc}</div>
          <div class="ad__button" style="background-color: var(--gray-700)">Start Free Trial</div>
          <div class="ad__sponsored"><strong style="color: ${adBackground}">${adCompany}</strong> Affiliate</div>
        </div>
      </div>
    </a>
  `;
}

额外优化建议

  • 如果需要避免重复叠加广告(比如多次调用函数时),可以先清空容器内容:
    const adBlock = document.querySelector("#ad-block");
    adBlock.innerHTML = ''; // 清空原有内容
    adBlock.innerHTML += `...广告代码...`;
    
  • 注意你原始JSON中第二个广告的adLink存在拼写错误(ad_compan21_link_goes_here),建议修正为正确的链接格式。

内容的提问来源于stack exchange,提问作者travis_arnold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:49