aporte:
/inicio/ubuntu
producción:
[ {"name":"/","path":"/"}, {"name":"home",path:"/home"}, {"name":"ubuntu",path:"/home/ubuntu"} ]como llegar asi?
Supongo que esto es lo que necesitas:
getTree = (path, nodes = []) => { // Split by levels const parts = path.split('/') // Remove last node from path and add to nodes array nodes.push({ name: parts.pop(), path }) // Update path without last node (already added) path = parts.join('/') if (path.length) { // Recall method recursively if nodes left return getTree(path, nodes) } else { // Or add root node to array and return it nodes.push({ name: '/', path: '/' }) return nodes } }Uso:
const path = '/root/user/home/ubuntu' console.log(getTree(path))Producción:
[ {name: 'ubuntu', path: '/root/user/home/ubuntu'} {name: 'home', path: '/root/user/home'} {name: 'user', path: '/root/user'} {name: 'root', path: '/root'} {name: '/', path: '/'} ]Si entendí tu pregunta correctamente, podrías hacer algo como esto.
Usando Array.prototype.split() para dividir la ruta en partes y estableciendo el primer argumento (la base) como el hogar y el resto de los argumentos como la ruta resultante
const string = 'home/ubuntu/test'; console.log(parse(string)); console.log(parse('home/')); console.log(parse('/')); function parse(str) { const obj = {}; const strArr = str.split('/'); obj['home'] = strArr[0] ? strArr[0] : '/'; const path = strArr.slice(1, strArr.length).join('/'); obj['path'] = path ? path : '/'; return obj; }PD: si esto no es lo que quisiste decir, házmelo saber en los comentarios.