简体   繁体   English

将文件/目录结构转换为 vue json 中的“树”,如何将新字段添加到新的 json 类型?

[英]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将文件/目录结构转换为 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.最终,这将存储在 mongodb 中并使用物化路径来确定它的关系。

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.这是我的代码,但我不知道如何添加 fid 字段,我尝试了更多方法,但都无法正常工作。

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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