Создать TreeView из URL в чистом виде Javascript - PullRequest
1 голос
/ 13 января 2020

Я получаю URL файлов в виде массива, как показано ниже

enter image description here

, и я хочу достичь объекта, подобного этому

var mainObj = [
{
    name: "Home",
    files: ["excel doc 1.xlsx", "excel doc 2.xlsx"],
    folders: [{
        name: "Procedure",
        files: ["excel doc 2.xlsx"],
        folders: []
    }],
},
{
    name: "BusinessUnits",
    files: [],
    folders:[
        {
            name:"Administration",
            files:[],
            folders:[{
                name: "AlKhorDocument",
                files: [],
                folders:[
                    {
                        name: "Album1",
                        files: [],
                        folders:[......]
                    }
                ]
            }]
        }
    ]
}

]

....... пожалуйста, дайте мне знать, если вы можете помочь в этом.

Кстати, как я хочу достичь, как это ниже

enter image description here

Если вы можете предложить лучше, то это поможет мне ..

Ответы [ 2 ]

1 голос
/ 13 января 2020

Имея только части пути строк, вы можете уменьшить массив, уменьшив структуру папок и добавив окончательный файл в структуру папок.

var data = ['Home/excel doc 1.xlsx', 'Home/excel doc 2.xlsx', 'Home/Procedure/excel doc', 'Home/Procedure/2.xlsx', 'BusinessUnits/Administration/AlKhorDocument/Album1/text.txt'],
    result = data.reduce((r, p) => {
        var path = p.split('/'),
            file = path.pop(),
            final = path.reduce((o, name) => {
                var temp = (o.folders = o.folders || []).find(q => q.name === name);
                if (!temp) o.folders.push(temp = { name });
                return temp;
            }, r);

        (final.files = final.files || []).push(file);
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 13 января 2020

Вам необходимо выполнить некоторый анализ строки , чтобы разбить строки URL на разные части, собрав всю информацию, необходимую для создания древовидной структуры.

По сути, вы можете разделить все Ваши строки URL в их разделы и создают окончательную структуру данных, анализируя все подразделы строк URL.

let urls = [
  'http://host.com/Performance/excel doc 1.xlsx',
  'http://host.com/BusinessUnits/Administration/AlKhorDocument/Album1/...',
  // ...
];

let result = [];

urls.forEach(url => {
  let relevantUrl = url.replace('http://host.com/', '');  // remove the unnecessary host name
  let sections = relevantUrl.split('/');  // get all string sections from the URL

  sections.forEach(section => {
    // check if that inner object already exists
    let innerObject = result.find(obj => obj.name === section);

    if(!innerObject) {
      // create an inner object for the section
      innerObject = {
        name: section,
        files: [],
        folders: []
      };
    }

    // add the current URL section (as object) to the result
    result.push(innerObject);
  });
});

Вам все еще нужно иметь дело с сохранением текущего подуровня вашего объекта раздела, что вы можете сделать либо итеративно, либо вызвав рекурсивную функцию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...