transform file/directory structure into 'tree' in vue json
I have an array of objects that looks like this:
[
{
"name": "Officer",
"fid": "123",
"isDirectory": true,
"path": "Officer/EventReport/SelfReport/110-04-02/RCBS.pdf"
},
{
"name": "Officer",
"fid": "456",
"isDirectory": true,
"path": "Officer/EventReport/SelfReport/110-04-10/1100_b.pdf"
},
{
"name": "Officer",
"fid": "875",
"isDirectory": true,
"path": "Officer/S_Meeting/W_Meeting/110-5/Officer_from.docx"
},
{
"name": "Officer",
"fid": "851",
"isDirectory": true,
"path": "Officer/S_Meeting/W_Meeting/110-5/16200.jpg"
},
{
"name": "Officer",
"fid": "510",
"isDirectory": true,
"path": "Officer/S_Meeting/W_Meeting/110-5/2021-05-18_2342.png"
}
]
There could be any number of arbitrary path's, this is the result of iterating through files and folders within a directory.
What I'm trying to do is determine the 'root' node of these. Ultimately, this will be stored in mongodb and use materialized path to determine it's relationships.
I hope I can show this one.
[
{
"name": "Officer",
"isDirectory": true,
"items": [
{
"name": "EventReport",
"isDirectory": true,
"items": [
{
"name": "SelfReport",
"isDirectory": true,
"items": [
{
"name": "2020-110-04-02",
"isDirectory": true,
"items": [
{
"name": "RCBS.pdf",
"fid": "123",
"isDirectory": false
}
]
},
{
"name": "2020-110-04-10",
"isDirectory": true,
"items": [
{
"name": "1100_b.pdf",
"fid": "456",
"isDirectory": false
}
]
}
]
}
]
},
{
"name": "SecurityMeeting",
"isDirectory": true,
"items": [
{
"name": "SecurityWorkMeeting",
"isDirectory": true,
"items": [
{
"name": "2021-05-SecurityWorkMeeting",
"isDirectory": true,
"items": [
{
"name": "Officer_Report.docx",
"fid": "875",
"isDirectory": false
},
{
"name": "16200.jpg",
"fid": "851",
"isDirectory": false
},
{
"name": "2021-05-18_2342.png",
"fid": "510",
"isDirectory": false
}
]
},
]
}
]
}
]
},
]
this is my code, but I don't know how can add fid field, I tried more methods, but it all cannot working.
let arr = xhr.data.result[0].UploadFile;
var tree = {};
arr.forEach((item) => {
//debugger;
let tokens = item.path.replace(/^\/|\/$/g, "").split("/");
let current = tree;
for (let i = 0; i < tokens.length; i++) {
if (!current[tokens[i]]) {
current[tokens[i]] = {};
}
current = current[tokens[i]];
}
});
const parseNode = function (node) {
return Object.keys(node).map((key) => {
//debugger;
if (Object.keys(node[key]).length === 0) {
return {
isDirectory: false,
name: key,
};
}
return {
isDirectory: true,
name: key,
items: parseNode(node[key]),
};
});
};
objectProvider._data[0].items = parseNode(tree);
modify like this
let arr = xhr.data.result[0].UploadFile;
var tree = {};
arr.forEach((item) => {
//debugger;
let tokens = item.path.replace(/^\/|\/$/g, "").split("/");
let current = tree;
for (let i = 0; i < tokens.length; i++) {
if (!current[tokens[i]]) {
current[tokens[i]] = {fid: item.fid};
}
current = current[tokens[i]];
}
});
const parseNode = function (node) {
return Object.keys(node).map((key) => {
const { fid } = node[key];
delete node[key].fid;
if (Object.keys(node[key]).length === 0) {
return {
isDirectory: false,
name: key,
fid,
};
}
return {
isDirectory: true,
name: key,
fid,
items: parseNode(node[key]),
};
});
};
objectProvider._data[0].items = parseNode(tree);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.