如何从具有绝对路径的对象数组构造类似于文件系统的JSON

加百列大帝

我正在尝试为fileSystem创建JSON文件。我在这篇文章中发现了一些有趣的东西,但是我需要得到如下结果:

{path: 'root',
  size: 24,
  isEmpty: false,
  isDir: true,
  lastModified: 156727373,
  children: [
        {path: 'root/folder1',
         size: 24,
         isEmpty: false,
         isDir: true,
         lastModified: 156727373,
         children: [{
               size:10,
               name:'file1',
               isDir:true,
               isEmpty:true,
               lastModified:10123123123
        }, {
               size:10,
               name:"file2",
               isDir:true,
               isEmpty:true,
               lastModified:10123123123
        }, {
               size:10,
               name:'file3',
               isDir:true,
               isEmpty:true,
               lastModified:10123123123}]}

来自具有键“ path”和绝对路径值的数据数组。像这样:

data:[{
    "path":"/root/folder1",
    "children":[
         {
            "size":10,
            "name":"file1",
            "isDir":true,
            "isEmpty":true,
            "lastModified":10123123123
         },
         {
            "size":10,
            "name":"file2",
            "isDir":true,
            "isEmpty":false,
            "lastModified":10123123123
         },
         {
            "size":10,
            "name":"file3",
            "isDir":false,
            "isEmpty":true,
            "lastModified":10123123123
         }
      ]}, {
    "path":"/root",
    "children":[
         {
            "size":10,
            "name":"folder1",
            "isDir":true,
            "isEmpty":false,
            "lastModified":10123123123
         }
      ]}
]

详细信息:我有一个数据库表,其中每一行代表一个目录,其中包含:绝对路径和带有其信息的子级。单击子目录将触发异步请求,询问该目录的子目录数据,数据库将创建该目录数据的一行。绝对路径将用于对整个文件系统树中的JSON中的各个文件夹进行排序。

我试过了:

var output = {};
var current;

for(var a=0; a<data.length; a++) {
  var s = data[a].path.split('/');
  current = output;
  for(var i=0; i<s.length; i++) {
    if(s[i] != '') {
      if(current[s[i]] == null) current[s[i]] = {};
      current = current[s[i]];
    }
  }
}

但是我不需要设置一个空对象(如果它不存在),而我唯一能得到的结果就是一个圆形结构,因此,我们将不胜感激。

妮娜·斯科茨(Nina Scholz)

您可以采用给定的路径和每个子代的名称来找到该对象。然后更新对象。

var data = [{ path: "/root/folder1", children: [{ size: 10, name: "file1", isDir: true, isEmpty: true, lastModified: 10123123123 }, { size: 10, name: "file2", isDir: true, isEmpty: false, lastModified: 10123123123 }, { size: 10, name: "file3", isDir: false, isEmpty: true, lastModified: 10123123123 }] }, { path: "/root", children: [{ size: 10, name: "folder1", isDir: true, isEmpty: false, lastModified: 10123123123 }] }],
    result = data.reduce((r, { path, children }) => {
        var temp = path.slice(1).split('/');
        children.forEach((o) => {
            Object.assign(
                temp
                    .concat(o.name)
                    .map((_, i, a) => a.slice(0, i + 1).join('/'))
                    .reduce((q, path, i) => {
                        var temp = (q.children = q.children || []).find(p => p.path === path);
                        if (!temp) q.children.push(temp = { path });
                        return temp;
                    }, r),
                o
            );
        });
        return r;
    }, {}).children[0];

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

本地文件对象的绝对路径

如何列出具有绝对路径的目录中的所有文件

Dotnet Core 3.1:如何使用具有文件绝对路径的 AddJsonFile?

如何获取在git commit中已更改但具有绝对路径的文件的列表?

如何获取文件的绝对路径

找到具有相对路径但不是绝对路径的文件?(VBS)

如何获取具有绝对路径的文件的InputStream并将其添加到StreamedContent对象,以便在ap:fileDownload中使用它?

CMake:从ExternalProject链接共享的C ++对象会生成具有相对路径的二进制文件,而不是绝对路径

如何在Hadoop文件系统中获取绝对路径?

具有绝对路径的“没有这样的文件或目录”

如何确定文件路径是否为绝对路径?

具有绝对路径的Django模板静态图像

具有绝对路径的故事书

Zcat + AWK具有绝对路径

具有绝对路径的xpath中的条件

重写规则,以便正确加载具有绝对路径的css和js文件

使用Dockerfile将具有绝对路径的文件复制到Docker容器

使用FTP命令行获取具有绝对路径的文件

在Linux中递归列出具有权限的文件的完整绝对路径

即使具有正确的绝对路径,Systemd服务也无法找到用户文件

rsync文本文件中具有绝对路径的目录列表

具有绝对路径的Java FileNotFoundException-无法读取或执行,但是文件存在

如何使用文件的绝对路径打开文件?

如何获取pathlib.Path对象的绝对路径?

如何从文件夹对象列表递归获取绝对路径?

用绝对路径加载json文件

Python /如何获取具有绝对路径的记录器?

如何在WPF项目中使用具有绝对路径的Image?

Typescript / Electron / Webpack模块如何/为什么具有绝对路径?