javascript - 在引导程序 4 行和列中对齐 fetch api 对象数组,使用 foreach 循环遍历数组
问题描述
我正在从一个外部 API 获取数据,该 API 是一个对象数组(每个对象都包含哈利波特电影角色的详细信息,并且有 50 个对象)我正在使用 foreach 循环遍历数组,以便我可以在浏览器中显示每个对象我正在使用 Bootstrap 4 行和列方法,现在我希望数组中的第一个对象显示在第一行第一列和第一行第二列中的第二个对象,类似地,第二行第一列中的第三个对象第二行第二列中的第四个对象等等. 如何使用 bootstrap 4 实现这一目标?
**HTML file**
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w=="
crossorigin="anonymous"
/>
<link rel="stylesheet" href="style.css" />
<title>harry poter</title>
</head>
<body>
<div class="gap">
<h1 class="font-weight-bold text-dark">
✨Harry Potter Characters✨
</h1>
</div>
<div class="form-group gap-1">
<input
type="search"
class="form-control"
placeholder="search for character"
/><i class="fas fa-search search"></i>
</div>
<div class="container gap-2">
<ul id="hpcharacters"></ul>
</div>
<script src="main.js"></script>
<script
src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"
></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"
></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"
></script>
</body>
</html>
JAVASCRIPT 文件
const hpCharacters = document.querySelector("#hpcharacters");
async function getHpCharacters() {
const res = await fetch("http://hp-api.herokuapp.com/api/characters");
const data = await res.json();
let output = "";
data.forEach((user) => {
output += `
<div class="row">
<div class="col-5">
<div class="row">
<div class="col-sm-5">
<li> ACTOR:${user.actor}</li>
<li> NAME:${user.name}</li>
<li> HOUSE:${user.house}</li>
</div>
<div class="col-sm-5"">
<img src="${user.image}" class="img-fluid">
</div>
</div>
</div>
<div class="col-5">
<div class="row">
<div class="col-sm-5">
<li> ACTOR:${user.actor}</li>
<li> NAME:${user.name}</li>
<li> HOUSE:${user.house}</li>
</div>
<div class="col-sm-5"">
<img src="${user.image}" class="img-fluid">
</div>
</div>
</div>
</div>
</div>`;
});
hpCharacters.innerHTML = output;
}
getHpCharacters();
解决方案
我创建了一个帮助函数getCharacterHTML
,如果对象存在data
并使用它,则返回列的 HTML,for-loop
而不是forEach
使其简单并以i += 2
.
const hpCharacters = document.querySelector("#hpcharacters");
function getCharacterHTML(data, i) {
const obj = data[i];
if (!obj) return "";
return `
<div class="col-5">
<div class="container">
<div class="row">
<div class="col-sm-5">
<li> ACTOR:${obj.actor}</li>
<li> NAME:${obj.name}</li>
<li> HOUSE:${obj.house}</li>
</div>
<div class="col-sm-5"">
<img src=" ${obj.image}" class="img-fluid" />
</div>
</div>
</div>
</div>
`;
}
async function getHpCharacters() {
const res = await fetch("http://hp-api.herokuapp.com/api/characters");
const data = await res.json();
let output = "";
for (let i = 0; i < data.length; i += 2) {
output += `
<div class="row">
${getCharacterHTML(data, i)}
${getCharacterHTML(data, i + 1)}
</div>
`;
}
hpCharacters.innerHTML = output;
}
getHpCharacters();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" />
<link rel="stylesheet" href="style.css" />
<title>harry potter</title>
</head>
<body>
<div class="gap">
<h1 class="font-weight-bold text-dark">
✨Harry Potter Characters✨
</h1>
</div>
<div class="form-group gap-1">
<input type="search" class="form-control" placeholder="search for character" /><i class="fas fa-search search"></i>
</div>
<div class="container gap-2">
<ul id="hpcharacters"></ul>
</div>
<script src="main.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>
推荐阅读
- service-worker - 用户退出后可以向用户发送推送通知吗?
- typescript - 包含另一个数组的 Array 的 TypesScript 通用语法
- c++11 - Codeforces 中的“诊断检测到问题 [cpp.g++17-drmemory]: ~~Dr.M~~ Dr. Memory 版本 1.11.0”错误是什么?
- javascript - 如何将Object的值映射到整个数组中其对应键的出现次数作为数组?
- javascript - JSX:按字母顺序对对象进行排序
- java - 为什么我在构造函数上收到 Selenium init 错误?
- android - 将位图加载到 ImageView 可以旋转显示的图像
- delphi - 如何在 Delphi (FireMonkey) 中更改画布 FillMode
- java - 如何让我的输出从文本文件中读取?
- autodesk-forge - BIM 360 Docs 如何复制文件