Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

240
Vistas
Busque una subcadena en un objeto usando una cadena completa

Hay rutas completas a archivos como

 libs/shared/util/something/tsconfig.spec.json apps/project/backend/subfolder/project.json this/has/no/match.json root-file.json

y necesito verificar si el archivo está dentro de una ruta en el objeto de proyectos dado:

 const projects = { "just-a-library": "libs/shared/util/something", "project-backend": "apps/project/backend" }

Mi problema es que nunca coincidirá completamente, sino solo el comienzo de la cadena, ya que hay subcarpetas opcionales y, por supuesto, nombres de archivo. Si hay una coincidencia, debería devolver la clave de objeto.

Entonces, para libs/shared/util/something/tsconfig.spec.json , debería devolver just-a-library y this/has/no/match.json no debería dar ningún resultado.

No puedo usar string.includes(substring) o string.indexOf(substring) ya que esto es al revés: la cadena completa es la entrada de la ruta del archivo y estoy buscando un posible elemento de subcadena.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si hago bien la tarea...

 const paths = [ "libs/shared/util/something/tsconfig.spec.json", "apps/project/backend/subfolder/project.json", "this/has/no/match.json", "root-file.json", ]; const projects = { "just-a-library": "libs/shared/util/something", "project-backend": "apps/project/backend", }; paths.forEach((path) => { const result = Object.keys(projects).find((k) => path.startsWith(projects[k])) || "[Not found]"; console.log(`${path} - ${result}`); });

Producción:

 libs/shared/util/something/tsconfig.spec.json - just-a-library apps/project/backend/subfolder/project.json - project-backend root-file.json - [Not found] this/has/no/match.json - [Not found]
about 4 years ago · Juan Pablo Isaza Denunciar

0

Si divide los proyectos de entrada y las rutas de archivos, puede crear un directorio a través de un objeto. Una vez que se haya creado, escanee el objeto para encontrar coincidencias.

Se agregaron algunas plantillas para mostrar el directorio.

 const projects = { "just-a-library": "libs/shared/util/something", "project-backend": "apps/project/backend" }; const inputs = [ "libs/shared/util/something/tsconfig.spec.json", "apps/project/backend/subfolder/project.json", "this/has/no/match.json", "root-file.json" ]; const createFolders = input => input.split(/\//g); const directory = {}; const project = "__PROJECT__"; const directoryView = document.getElementById("directory"); const projectFolders = {}; Object.keys(projects).forEach(key => { projectFolders[key] = createFolders(projects[key]); }); Object.keys(projectFolders).forEach(key => { let pwd = directory; for (let i = 0; i < projectFolders[key].length; i++) { if (!pwd[projectFolders[key][i]]) { pwd[projectFolders[key][i]] = {}; } pwd = pwd[projectFolders[key][i]]; } pwd[project] = key; }); directoryView.innerText = JSON.stringify(directory, null, 2); const inputFolders = inputs.map(entry => createFolders(entry)); for (let i = 0; i < inputFolders.length; i++) { let pwd = directory; const path = []; for (let j = 0; j < inputFolders[i].length; j++) { if (!pwd[inputFolders[i][j]] && j !== inputFolders[i].length - 1) { if (pwd === directory) { console.log("invalid input path:", inputFolders[i].join("/")); } else { console.log("file:", inputFolders[i].join("/"), "\nmatching project:", pwd[project]); } break; } else { pwd = pwd[inputFolders[i][j]]; path.push(inputFolders[i][j]); } } }
 <pre id="directory" style="width:100px"></pre>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda