gpt4 book ai didi

javascript - 关于在javascript中使用数组进行web编程的问题

转载 作者:行者123 更新时间:2023-12-01 16:25:07 27 4
gpt4 key购买 nike

我必须使用 javascript 中的目录数组来显示 web 目录。但我不知道如何在这种情况下提出条件。

const directory = [
{ type: 'file', name: 'file1.txt' },
{ type: 'file', name: 'file2.txt' },
{
type: 'directory',
name: 'HTML Files',
files: [
{ type: 'file', name: 'file1.html' },
{ type: 'file', name: 'file2.html' }
]
},
{ type: 'file', name: 'file3.txt' },
{
type: 'directory',
name: 'JavaScript Files',
files: [
{ type: 'file', name: 'file1.js' },
{ type: 'file', name: 'file2.js' },
{ type: 'file', name: 'file3.js' }
]
}
];

我正在写的部分,但我不知道如何检查条件,因为所有类型都是文件:

  var File = '\0';
if ()
directory.forEach(eachFile => {

File = File + `<li>${eachFile}</li>`;
});

这是我的 HTML 文件。

 <div id="directories">
<header>
<title>File Directories</title>
</header>
<body>
<h2>Directories</h2>
<ul id = "displayDirectories"></ul>
</body>
</div>

输出应该是这样的:

image of the output html to achieve

最佳答案

由于结构有多个级别,因此必须递归完成,为此您需要一个函数(为每个级别递归调用自身)。函数很简单,取一个files数组并为该文件数组生成 html 代码(包括 <ul></ul> ),它为每个项目创建一个 li包含该项目名称的元素,如果该项目也是一个目录,它会用该目录称呼自己 files数组以生成其文件的 html 并将其插入到 li 中:

function listEntries(files) {                                              // takes an array of files and generate an html string of the ul element
let html = "<ul>"; // opening the ul element

files.forEach(entry => { // for each entry in the array
if(entry.type == "file") { // if the entry is a file
html += "<li>" + entry.name + "</li>"; // simply add an li element containing the name
} else { // otherwise, if it's a directory
html += "<li>" + entry.name + listEntries(entry.files) + "</li>"; // add an li element containing the name and an ul element of its children, created via calling listEntries on the files array
}
});

return html + "</ul>"; // close the ul and return
}

您可以使用 reduce 进一步简化它而不是 forEach和一个三元而不是 if/else像这样:

function listEntries(files) {
return files.reduce((html, entry) =>
html + "<li>" + entry.name + (entry.type === "directory" ? listEntries(entry.files) : "") + "</li>"
, "<ul>") + "</ul>";
}

注意:ul标签包含在 html 中,应该接收生成的 html 的 DOM 元素不应该是另一个 ul元素,一个 div会这样做,就像这样:

<div id="displayDirectories"></div>

演示:

function listEntries(files) {
return files.reduce((html, entry) =>
html + "<li>" + entry.name + (entry.type === "directory" ? listEntries(entry.files) : "") + "</li>"
, "<ul>") + "</ul>";
}


const directory = [ { type: 'file', name: 'file1.txt' }, { type: 'file', name: 'file2.txt' }, { type: 'directory', name: 'HTML Files', files: [ { type: 'file', name: 'file1.html' }, { type: 'file', name: 'file2.html' } ] }, { type: 'file', name: 'file3.txt' }, { type: 'directory', name: 'JavaScript Files', files: [ { type: 'file', name: 'file1.js' }, { type: 'file', name: 'file2.js' }, { type: 'file', name: 'file3.js' } ] } ];

document.getElementById("displayDirectories").innerHTML = listEntries(directory);
<div id="displayDirectories"></div>

关于javascript - 关于在javascript中使用数组进行web编程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62985516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com