简体   繁体   中英

transform file/directory structure into 'tree' in vue json, how can add new field to new json type?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM