[英]JavaScript: Comparing arrays of objects with nested array of object
[英]Converting an object of nested objects / arrays into something array like in javascript
首先,我没有一组对象,或者只有一个没有深度的对象。 我具有以下结构,基本上是一棵文件夹和文件树。
{
"C:": {
"files": [],
"DataStore": {
"files": ["Continuous_2016-02-26_15.08.11.dat",
"Continuous_2016-02-26_15.38.10.dat",
"Continuous_2016-02-26_16.08.09.dat",],
"c4": {
"160226": {
"files": [
"Continuous231.dat",
"Continuous_2016-02-26_16.21.58.dat",
"Continuous_2016-02-26_16.31.58.dat",
"Continuous_2016-02-26_16.41.58.dat",
"Continuous_2016-02-26_16.51.58.dat",
"Continuous_2016-02-26_17.01.58.dat",
"Continuous_2016-02-26_17.11.57.dat",
"Continuous_2016-02-26_17.21.57.dat",
"Continuous_2016-02-26_17.31.57.dat",
"Continuous_2016-02-26_17.41.57.dat"
]
},
"files": []
}
}
}
}
我想将其放入数组,以便可以在Angular中构建模板以显示这些文件/文件夹。
就像是 :
[{
"name": "c:",
"files": ["test.dat"],
"directories": [{
"name": "DataStore",
"files": [],
"directories": [{
"name": "c4",
"files": [{
"name": "filename.dat"
}, {
"name": "filename.dat"
}, {
"name": "filename.dat"
}, {
"name": "filename.dat"
}, {
"name": "filename.dat"
}],
"directories": []
}]
}]
}]
我显然宁愿让服务器返回一个像对象一样的可行数组,但是那现在就不行了。
您应该尝试使用递归函数来遍历目录。 您将为每个目录创建一个节点,然后为其子目录调用相同的函数。
function constructDirecory(directory, name) { // create list of files var files = []; if (directory.files) { directory.files.forEach(function(fileName) { files.push({ name: fileName }); }); } // loop list directories var directories = []; for (var childDirectoryName in directory) { if (directory.hasOwnProperty(childDirectoryName)) { if (childDirectoryName !== 'files') { // it's a directory, see what's inside var childDirectoryData = directory[childDirectoryName]; var directoryData = constructDirecory(childDirectoryData, childDirectoryName); directories.push(directoryData); } } } return { name: name || 'root', files: files, directories: directories }; } var data = { "C:": { "files": [], "DataStore": { "files": ["Continuous_2016-02-26_15.08.11.dat", "Continuous_2016-02-26_15.38.10.dat", "Continuous_2016-02-26_16.08.09.dat", ], "c4": { "160226": { "files": [ "Continuous231.dat", "Continuous_2016-02-26_16.21.58.dat", "Continuous_2016-02-26_16.31.58.dat", "Continuous_2016-02-26_16.41.58.dat", "Continuous_2016-02-26_16.51.58.dat", "Continuous_2016-02-26_17.01.58.dat", "Continuous_2016-02-26_17.11.57.dat", "Continuous_2016-02-26_17.21.57.dat", "Continuous_2016-02-26_17.31.57.dat", "Continuous_2016-02-26_17.41.57.dat" ] }, "files": [] } } } }; var result = constructDirecory(data); $('#result').text(JSON.stringify(result, null, 2))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <pre id='result'></pre>
这是一个演示小提琴 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.