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

使用Vanilla JS与模板字面量遍历含数组属性的对象数组时的图标显示问题

解决模板字面量渲染技能图标只显示一个的问题

嘿,我之前刚踩过这个坑!根据你的描述,大概率是你在处理技能图标数组的时候,没有把所有图标HTML片段累加起来,反而每次都覆盖了之前的内容,最后就只剩最后一个图标啦。

常见错误原因

比如你可能写了类似这样的代码:

// 错误示例:每次赋值而非累加
let skillIcons = '';
project.skillIcons.forEach(icon => {
  skillIcons = `<img src="${icon}" alt="技能图标">`;
});

这里每次循环都会把skillIcons重新赋值成当前图标的HTML,之前的内容都被覆盖了,最后自然只能看到最后一个图标。

正确的两种解决方法

方法1:用累加的方式拼接图标HTML

初始化一个空字符串,然后遍历图标数组时用+=把每个图标的HTML片段加进去:

portfolioProjects.forEach(project => {
  let skillIconsHtml = '';
  // 遍历每个图标,累加HTML片段
  project.skillIcons.forEach(icon => {
    skillIconsHtml += `<img src="${icon}" alt="技能图标" class="skill-icon">`;
  });
  
  // 把完整的图标字符串插入模板字面量
  const projectCard = `
    <div class="portfolio-project">
      <h2>${project.title}</h2>
      <div class="skills-used">${skillIconsHtml}</div>
    </div>
  `;
  
  // 渲染到页面
  document.getElementById('portfolio').insertAdjacentHTML('beforeend', projectCard);
});

方法2:用map + join更简洁实现

这是我更推荐的写法,代码更简洁,可读性也更高:

portfolioProjects.forEach(project => {
  // 用map把每个图标转成HTML字符串,再用join拼接成完整的字符串
  const skillIconsHtml = project.skillIcons.map(icon => {
    return `<img src="${icon}" alt="${icon.split('.')[0]}技能图标" class="skill-icon">`;
  }).join(''); // 一定要用join(''),否则数组转字符串会自带逗号分隔符!
  
  const projectCard = `
    <div class="portfolio-project">
      <h2>${project.title}</h2>
      <div class="skills-used">${skillIconsHtml}</div>
    </div>
  `;
  
  document.getElementById('portfolio').insertAdjacentHTML('beforeend', projectCard);
});

这里要注意:map返回的是一个数组,如果直接插入模板字面量,数组会自动转成字符串,元素之间会加逗号,所以必须用join('')把数组元素拼接成一个无分隔符的字符串。

如果这样调整后还是有问题,可以检查下图标的路径是否正确,但根据你的描述,核心问题应该就是字符串拼接的方式不对~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:10:44