【发布时间】:2018-05-02 09:08:52
【问题描述】:
我正在自学 vanilla JS,希望能真正精通它。
我已经为此绞尽脑汁好几天了。我正在尝试使用模板文字来显示数组中对象的属性。
这些对象是投资组合项目。在每个对象中,我都有一个属性,它是一组图标图像。除了所有图标图像之外,我能够在页面上呈现所有内容。
我只能使用 class="skills-used" 在我的 div 中显示 1 个图标图像。
谁能帮我弄清楚如何映射该图标数组中的所有图像?
或者,是否有更好的(或推荐的)方法来代替?
const projects = [
{
image: "http://via.placeholder.com/360x180",
title: "Project 1",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
},
{
image: "http://via.placeholder.com/360x180",
title: "Project 2",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
},
{
image: "http://via.placeholder.com/360x180",
title: "Project 3",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
}
];
这是我尝试将其呈现到页面的方式:
let portfolioItemsDiv = document.getElementById('portfolio-items');
projects.forEach((project) => {
portfolioItemsDiv.innerHTML += `
<div class="portfolio-item">
<img src="${project.image}" alt="${project.title}" />
<h3 class="project-title">${project.title}</h3>
<div class="skills-used">
${project.skillIconImages.map((x) => '<img src="' + x +'"')}
</div>
<div class="project-description">
<p>${project.description}</p>
</div>
</div>
`;
});
如果需要整个(非重构)函数,这里是:
(() => {
const projects = [
{
image: "http://via.placeholder.com/360x180",
title: "Project 1",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
},
{
image: "http://via.placeholder.com/360x180",
title: "Project 2",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
},
{
image: "http://via.placeholder.com/360x180",
title: "Project 3",
skillIconImages: ["http://via.placeholder.com/50x50", "http://via.placeholder.com/55x50", "http://via.placeholder.com/50x55", "http://via.placeholder.com/60x50"],
description: "Ex rationibus deterruisset eos, ius tale nullam officiis an. Duo propriae mentitum salutandi id, nulla nobis persequeris ut eam, ex dicta libris laboramus duo. Amet errem voluptatibus an vix, eum ut nulla scriptorem. Ea etiam noluisse perfecto eum. Nec ad consul ubique, his id reque nonumy percipit."
}
];
// get the DOM element to where all the portfolio items will go into
let portfolioItemsDiv = document.getElementById('portfolio-items');
// render each project to the DOM
projects.forEach((project) => {
portfolioItemsDiv.innerHTML += `
<div class="portfolio-item">
<img src="${project.image}" alt="${project.title}" />
<h3 class="project-title">${project.title}</h3>
<div class="skills-used">
${project.skillIconImages.map((x) => '<img src="' + x +'"')}
</div>
<div class="project-description">
<p>${project.description}</p>
</div>
</div>
`;
});
})();
【问题讨论】:
标签: javascript mapping template-literals