как заполнить кодом вложенную древовидную структуру в obj? - PullRequest
1 голос
/ 23 января 2020

Я хотел бы создать древовидную вложенную структуру как obj (позже JSON), но изо всех сил пытался сделать это правильно.

Я хочу преобразовать это:

root/app/index.html

в это:

{
  type: 'box',
  name: 'root'
  children: {
    type: 'box',
    name: 'app',
    children: {
      type: 'item',
      name: 'index.html'
    }
  }
}

Как я могу сделать это с помощью кода любой совет?

Ответы [ 2 ]

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

Вы также можете использовать рекурсивный подход:

let str = 'root/app/index.html';
console.log(convertToNestedTree(str))

function convertToNestedTree(str) {
    let members = str.split('/');

    if(members.length === 1) {
        return ({type:'item', name:str});
    }

    return ({type:'box', name:members[0], 
            children:convertToNestedTree(members.slice(1).join('/'))
           });
}
1 голос
/ 23 января 2020

Вы можете создать функцию, которая принимает строку и split ее в массив, а затем вы можете использовать метод reduce в этом массиве для построения вложенной структуры.

const string = 'root/app/index.html';

const parse = str => {
  const result = {}

  str.split('/').reduce((r, name, i, a) => {
    Object.assign(r, {name, type: a[i + 1] ? 'box' : 'item'})
    return a[i + 1] ? (r.children = {}) : r
  }, result)

  return result;
}

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