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

130
Visualizações
Acceder a matrices anidadas con profundidad dinámica a través de índices

Soy bastante nuevo en TypeScript y tengo algunos problemas para acceder a un objeto en matriz con profundidad dinámica. Por ejemplo:

 export interface folder{ name: string, type: string, position: number[], // index for each depth level children: folder[]
 { "name": "Folder1", "depth": 0, "position": [0] // indeces for each depth level "children": [ { "name": "Folder2", "depth": 1, "position": [0,0] // indeces for each depth level "children": [ { "name": "Folder3" "depth": 2, "position": [0,0,0] // indeces for each depth level }, { "name": "Folder4" "depth": 2, "position": [0,0,1] // indeces for each depth level } ] } ] }

Para obtener la Carpeta4, usaría la notación de puntos como: this.folder[0].children[0].children[1]

Ahora me preguntaba si hay una manera de acceder dinámicamente al objeto a través de la matriz de posición sin iterar sobre toda la estructura. Logré que funcionara definiendo una cadena y agregando ".children[PositionIndex]" para cada valor en posición y ejecutándolo con eval . Sin embargo, obviamente esa no es una forma razonable/segura de hacer esto.

Cualquier ayuda sería muy apreciada. ¡Gracias!

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

0

En lugar de tener un campo de "posición" que describa la ruta a una cierta profundidad/carpeta anidada profundamente en la estructura misma, tenga una segunda estructura poco profunda que mapee los nombres de las carpetas a las profundidades y utilícela para llegar a una carpeta:

 const folders = { "name": "Folder1", "depth": 0, "position": [0], // note: this is wrong, folder one isn't nested and therefor has a position of [] "children": [ { "name": "Folder2", "depth": 1, "position": [0,0], "children": [ { "name": "Folder3", "depth": 2, "position": [0,0,0] }, { "name": "Folder4", "depth": 2, "position": [0,0,1] } ] } ] }; const folderDepths = { // this maps depths to folders. note that "folder1" does not have a // depth, because it is the root node and is not nested. this means // that all nodes nested below folder1 have one path segment less // compared to your original structure. Folder1: [], Folder2: [0], Folder3: [0, 0], Folder4: [0, 1] }; const accessFolder = (name, depths, tree) => { // we use this function to access (sub-)folders. it takes the name // of the folder to reach, the depths-mapping and the original // structure. stops when there are no more children to dig into or // the final depth is reached. returns the accessed (sub-)tree. let retv = tree; let path = depths[name]; for (let i = 0; i < path.length && retv; i += 1) { if (retv.children && retv.children[path[i]]) { retv = retv.children[path[i]]; } } return retv; } console.log(accessFolder('Folder2', folderDepths, folders)); console.log(accessFolder('Folder4', folderDepths, folders));

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