Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

234
Visualizações
Obtener directorios de archivos como objeto de matriz anidado

Quiero obtener mis directorios de archivos como un objeto de matriz anidado, pero parece que no puedo averiguar cómo convertir

 [ 'routes/files', 'routes/files/emptyfolder', 'routes/files/somefolder', 'routes/files/somefolder/example.docx', 'routes/files/test.docx', 'routes/randomdata.json' ]

a

 [ { title: 'routes', content: [ { title: 'files', content: [ { title: 'empty folder', content: [] }, { title: 'somefolder', content: [ { title: 'example.docx', }, ] }, { title: 'test.docx', } ], }, { title: 'randomdata.json' } ], } ]

me parece un problema imposible de resolver. Me encantaría saber cómo solucionarlo.

Gracias.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Así es como lo resolví: no es la mejor solución, pero funciona.

 const arr = [ "routes/files", "routes/files/emptyfolder", "routes/files/somefolder", "routes/files/somefolder/example.docx", "routes/files/test.docx", "routes/randomdata.json", ]; const arr2 = arr.map((p) => p.split("/")); const setNestedObjectField = ( obj, props, value ) => { if (!Array.isArray(obj)) { if (!obj.content) { obj.content = []; } obj = obj.content; } for (const propName of props) { const next = obj.find((el) => el.title === propName); if (!next) { console.assert(props.at(-1) === propName); // last propName obj.push(value); } else { if (!next.content) { next.content = []; } obj = next.content; } } }; const rez = []; let index = 0; while (arr2.some((s) => s[index] !== undefined)) { // arr2 = arr2.filter((a) => a.length); const layer = arr2.reduce((acc, pathArr) => { if (pathArr[index] === undefined) return acc; acc.add(pathArr.slice(0, index + 1).join("/")); return acc; }, new Set()); // console.log({ layer }); for (const key of layer) { setNestedObjectField(rez, key.split("/"), { title: key.split("/").at(-1) }); } index++; } console.log(rez);
about 4 years ago · Juan Pablo Isaza Relatório

0

Me encontré con esta pregunta y es un problema interesante, sé que ya fue respondido, pero quería dedicar un poco de mi tiempo a resolverlo a mi manera.

aqui les dejo mi codigo:

 function nestedDirectories (arr) { const splittedArray = arr.map(a => a.split('/')); return { mergeObjs: function(target, source) { for (let key in source) { if(!target[key]) target[key] = {}; target[key] = this.mergeObjs(target[key], source[key]); } return target; }, buildResponse: function (objMain) { let arr = []; for (let key in objMain) { let o = { title: key, content: [] }; if(key.includes(".")) { delete o.content; } else if (Object.keys(objMain[key]).length) { o.content = this.buildResponse(objMain[key]); } arr.push(o); } return arr; }, exec: function () { let targetObject = {}; splittedArray.forEach(arrParent => { let strObj = ''; for (let i = arrParent.length - 1; i >= 0 ; i--) { strObj = `"${arrParent[i]}": {${strObj}}`; } let parseObj = JSON.parse(`{${strObj}}`); targetObject = this.mergeObjs(targetObject, parseObj); }); return this.buildResponse(targetObject); } } }

y usarlo así:

 const dirs = [ 'routes/files', 'routes/files/emptyfolder', 'routes/files/somefolder', 'routes/files/test.docx', 'routes/randomdata.json', 'routes/files/somefolder/example.docx' ]; const data = nestedDirectories(dirs).exec();

resultado:

 [ { title: 'routes', content: [ { title: 'files', content: [ { title: 'emptyfolder', content: [] }, { title: 'somefolder', content: [ { title: 'example.docx' } ] }, { title: 'test.docx' } ] }, { title: 'randomdata.json' } ] } ]
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda