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

184
Vistas
JS Cómo encontrar resultados en objetos anidados

Tengo un objeto anidado que necesito iterar. El objeto se ve así:

 { "Page1": { "path": "/page1" }, "Page2": { "path": "/account/menu/page1" }, "Page3": { "items": { "Subpage1": { "path": "/account/menu/subpage1" }, "Subpage2": { "path": "/account/menu/subpage2" }, "Subpage3": { "path": "/account/menu/subpage3" } } }, "Page4": { "items": { "Subpage4": { "path": "/account/menu/subpage4" }, "Subpage5": { "path": "/account/menu/subpage5" }, ...

Necesito obtener el nombre de la subpágina específica, según la ruta del usuario.

Por ejemplo. Si el usuario está en la página /account/menu/subpage2 . Necesito obtener el nombre Subpage2 .

Lo que hice es lo siguiente:

 const currentPageName = getPageName(this.props?.match?.params.menu); //This function gets the name of the current page (Subpage2) const getThePageName = = path => Object.keys(jsonData).find(el => jsonData[el]?.items && jsonData[el]?.items[currentPageName]?.path === path) console.log("getThePageName", getThePageName("/account/menu/subpage2")));

El resultado de lo anterior es Page3 , pero necesito que sea Subpage2 . ¿Qué estoy haciendo mal y cómo solucionarlo?

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

0

Concepto

Repita todas las entradas de datos y verifique si la ruta de cualquiera de estas páginas es igual a la ruta de destino especificada. También dentro del ciclo, itere a través de todas las subpáginas de las páginas y, nuevamente, verifique si la ruta de cualquiera de estas subpáginas es igual a la ruta de destino especificada. Si se encuentra una coincidencia, devuelva el resultado como la clave del objeto de la ruta.

Código

 const data = {"Page1":{"path":"/page1"},"Page2":{"path":"/account/menu/page1"},"Page3":{"items":{"Subpage1":{"path":"/account/menu/subpage1"},"Subpage2":{"path":"/account/menu/subpage2"},"Subpage3":{"path":"/account/menu/subpage3"}}},"Page4":{"items":{"Subpage4":{"path":"/account/menu/subpage4"},"Subpage5":{"path":"/account/menu/subpage5"}}}}; function findPage(data,target){ let result; Object.entries(data).forEach(page => { if (page[1].path === target) result = page[0]; if (page[1].items){ Object.entries(page[1].items).forEach(subpage => { if (subpage[1].path === target) result = subpage[0]; }); } }); return result; } console.log(findPage(data,"/account/menu/subpage2")); console.log(findPage(data,"/page1"));

about 4 years ago · Juan Pablo Isaza Denunciar

0

La solución que utiliza la recursividad puede funcionar con un nivel más profundo de "subpáginas".

 const data = { "Page1": { "path": "/page1" }, "Page2": { "path": "/account/menu/page1" }, "Page3": { "items": { "Subpage1": { "path": "/account/menu/subpage1" }, "Subpage2": { "path": "/account/menu/subpage2" }, "Subpage3": { "path": "/account/menu/subpage3" } } }, "Page4": { "items": { "Subpage4": { "path": "/account/menu/subpage4" }, "Subpage5": { "path": "/account/menu/subpage5" }, "Subpage6": { "items": { "Subsubpage1": { "path": "/secret" } } } } } }; function getPageNameForPath(data, path) { for (const pageName in data) { if (data[pageName].path != null) { if (data[pageName].path === path) { return pageName; } } else { const found = getPageNameForPath(data[pageName].items, path); if (found) { return found; } } } } console.log(getPageNameForPath(data, '/account/menu/subpage2')); console.log(getPageNameForPath(data, '/account/menu/page1')); console.log(getPageNameForPath(data, '/secret'));

about 4 years ago · Juan Pablo Isaza Denunciar

0

aquí hay una pieza de código

 const jsonData = { "Page1": { "path": "/page1" }, "Page2": { "path": "/account/menu/page1" }, "Page3": { "items": { "Subpage1": { "path": "/account/menu/subpage1" }, "Subpage2": { "path": "/account/menu/subpage2" }, "Subpage3": { "path": "/account/menu/subpage3" } } }, "Page4": { "items": { "Subpage4": { "path": "/account/menu/subpage4" }, "Subpage5": { "path": "/account/menu/subpage5" }, } } }; const currentPageName = 'Subpage2'; const getThePageName = path => Object.keys(jsonData).reduce((acc, el) => { if (acc?.length) { return acc; } if (jsonData[el].hasOwnProperty('items')) { if (jsonData[el]?.items?.[currentPageName]?.path === path) { console.log(path, jsonData[el]?.items?.[currentPageName]?.path) acc = currentPageName; } } else { if (jsonData[el].path === path) { console.log(path, jsonData[el].path, path) acc = el; } } return acc; }, undefined); console.log("getThePageName", getThePageName("/account/menu/subpage2"));

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