为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用node js将字符串路径转换为JSON父子树?

如何使用node js将字符串路径转换为JSON父子树?

侃侃尔雅 2023-07-06 15:17:12
我一直在尝试使用将路径数组转换为JSON父子树node js。我正在使用我稍微修改过的提到的答案。下面是我的代码:function buildTree(obj) {  let result = [];  let level = {    result  };  obj.forEach(item => {    if (typeof item.fsLocation != "undefined") {      var obj = {}      var path = ""      item.fsLocation.split('/').reduce((r, name, i, a) => {        path += "/"+name        if (!r[name]) {          r[name] = {            result:[]          };          obj = {            name,            children: r[name].result          }          if(r[name].result.length < 1){            obj["path"] = item.fsLocation            obj["fileSize"] = item.fileSize            obj["createDate"] = item.createDate            obj["editDate"] = item.editDate            obj["fileType"] = item.fileType            obj["version"] = item.version          }          r.result.push(obj)        }        return r[name];      }, level)    }  })  return result}obj:[   {      "createDate":"2019-10-03T07:00:00Z",      "fileType":"pptx",      "fsLocation":"Events/Plays/Technologies/Continuity/technology.pptx",      "fileSize":46845322,      "fileName":"technology.pptx",      "editDate":"2019-10-03T07:00:00Z",      "version":"10.0"   },   {      "fileName":"operations.pptx",      "fileSize":23642178,      "fileType":"pptx",      "fsLocation":"Events/Plays/Technologies/operations.pptx",      "createDate":"2019-01-08T08:00:00Z",      "editDate":"2019-01-09T08:00:00Z",      "version":"15.0"   },   {      "fileName":"Solution.pdf",      "createDate":"2016-06-16T22:42:16Z",      "fileSize":275138,      "fsLocation":"Events/Plays/Technologies/Solution.pdf",      "fileType":"pdf",      "editDate":"2016-06-16T22:42:16Z",      "version":"1.0"   }]知道如何产生上述输出吗?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

始终优先考虑可读性而不是花哨:


const arr = [{

    "fileName": "operations.pptx",

    "fileSize": 23642178,

    "fileType": "pptx",

    "fsLocation": "Events/Plays/Technologies/operations.pptx",

    "createDate": "2019-01-08T08:00:00Z",

    "editDate": "2019-01-09T08:00:00Z",

    "version": "15.0"

  },

  {

    "createDate": "2019-10-03T07:00:00Z",

    "fileType": "pptx",

    "fsLocation": "Events/Plays/Technologies/Continuity/technology.pptx",

    "fileSize": 46845322,

    "fileName": "technology.pptx",

    "editDate": "2019-10-03T07:00:00Z",

    "version": "10.0"

  },

  {

    "fileName": "Solution.pdf",

    "createDate": "2016-06-16T22:42:16Z",

    "fileSize": 275138,

    "fsLocation": "Events/Plays/Technologies/Solution.pdf",

    "fileType": "pdf",

    "editDate": "2016-06-16T22:42:16Z",

    "version": "1.0"

  }

]


const tree = {

  name: 'root',

  path: '',

  children: []

}


for (const e of arr) {

  let node = tree

  const nodenames = e.fsLocation.split('/')

  while (nodenames.length > 0) {

    const nodename = nodenames.shift()

    if (!node.children.map(e => e.name).includes(nodename)) {

      node.children.push({

        name: nodename,

        path: [node.path, nodename].join('/'),

        children: []

      })

    }

    node = node.children.filter(e => e.name === nodename)[0]

  }

}

console.log(JSON.stringify(tree, null, 2));

返回树:


{

  "name": "root",

  "path": "",

  "children": [

    {

      "name": "Events",

      "path": "/Events",

      "children": [

        {

          "name": "Plays",

          "path": "/Events/Plays",

          "children": [

            {

              "name": "Technologies",

              "path": "/Events/Plays/Technologies",

              "children": [

                {

                  "name": "operations.pptx",

                  "path": "/Events/Plays/Technologies/operations.pptx",

                  "children": []

                },

                {

                  "name": "Continuity",

                  "path": "/Events/Plays/Technologies/Continuity",

                  "children": [

                    {

                      "name": "technology.pptx",

                      "path": "/Events/Plays/Technologies/Continuity/technology.pptx",

                      "children": []

                    }

                  ]

                },

                {

                  "name": "Solution.pdf",

                  "path": "/Events/Plays/Technologies/Solution.pdf",

                  "children": []

                }

              ]

            }

          ]

        }

      ]

    }

  ]

}


查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信