javascript - For Loop on array from dynamic API in JSON format within template literals

标签 javascript arrays json api for-loop

尝试在不需要 React、Angular 或其他任何东西的情况下使用尽可能多的普通 Javascript 来完成所有这些工作。我正在通过我的 JS 文件呈现 HTML 内容。如何在模板文字 (`) 中执行 for 循环?我无法让循​​环工作,我需要它来显示实时数据。使用您在 JS 文件中看到的代码,我手动放入 0 索引以从数组中获取第一个宇航员,它可以正常工作并显示。

这是我的 JS 文件。

const apiData ={
    url: 'http://api.open-notify.org/astros.json'
}

const {url} = apiData
const apiUrl = `${url}`

fetch(apiUrl)
    .then( (data) => data.json() )
    .then ( (astronauts) => createHtml(astronauts) )

const createHtml = (data) => {
    console.log(data)
    const html = `
    <div> 
        Total People In Space: ${data.number} <br>
        Names: ${data.people[0].name} <br>
        Craft: ${data.people[0].craft}
    </div>
    `
    const astronautDiv = document.querySelector('.astronaut')
    astronautDiv.innerHTML = html
}

这是来自 API 的 JSON 格式的最新内容。

{"number": 3, "people": [{"craft": "ISS", "name": "Chris Cassidy"}, {"craft": "ISS", "name": "Anatoly Ivanishin"}, {"craft": "ISS", "name": "Ivan Vagner"}], "message": "success"}

这是我的 HTML 文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Space</title>
    <link rel="stylesheet" href="static/css/styles.css">
    <script src="static/js/main.js"></script>
</head>
<body>
    <div class="astronaut"></div>
</body>
</html>

最佳答案

使用 .map 和 .join,我们可以在模板文字中构造一个字符串

const JSONDATA = {"number": 3, "people": [{"craft": "ISS", "name": "Chris Cassidy"}, {"craft": "ISS", "name": "Anatoly Ivanishin"}, {"craft": "ISS", "name": "Ivan Vagner"}], "message": "success"}

const createHtml = (data) => {
    const html = `
    <div> 
        Total People In Space: ${data.number} <br>
        ${data.people.map(x => `<div>Name: ${x.name}, Craft: ${x.craft}</div>`).join("")}
    </div>
    `
    const astronautDiv = document.querySelector('.astronaut')
    astronautDiv.innerHTML = html
}

createHtml(JSONDATA);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Space</title>
    <link rel="stylesheet" href="static/css/styles.css">
    <script src="static/js/main.js"></script>
</head>
<body>
    <div class="astronaut"></div>
</body>
</html>

关于javascript - For Loop on array from dynamic API in JSON format within template literals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63221852/

相关文章:

javascript - 如何更改具有特定 url 的所有 href?

c# - 尝试将 JSON 转换为 [Key,Value] 字典

json - 无法读取 null Angular2 JSON 的属性 'name'

java - 如何应用过滤器从 data.gov.in api 获取指定数据?

javascript - 矩形点测试

Javascript:如何从 mysql 查询中过滤对象数组推送

c - 在C中向数组添加值不起作用

javascript - 在将数组推送到数组并像对象一样分配键值对之后,数组的长度是多少

javascript - 播放/暂停所有音频链接的常规功能

javascript - 比较两个数组并使用 ng-style 标记数组中的相等条目