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

214
Vistas
¿Cómo puedo encontrar el padre del objeto anidado? (Javascript)

Tengo un objeto anidado. Necesito una función. Necesito usarlo para encontrar la "clave principal". ¿Qué función debo usar para ello? Mis datos :

 [{ "Name": "Main Menu", "Key": "1", "Children": [{ "Name": "Sub Menu 1", "Key": "10", "Children": [{ "Name": "Very Sub Menu", "Key": "20", "Children": [] }] }] }, { "Name": "Main Menu 2", "Key": "2", "Children": [{ "Name": "Sub Menu 2", "Key": "11", "Children": [{ "Name": "Very Sub Menu 2", "Key": "21", "Children": [{ "Name": "Extra Small Menu", "Key": "30", "Children": [] }] }] }] } ]

Por ejemplo, cuando envío mi matriz y clave (por ejemplo, "10" (Submenú 1) para ese ejemplo), necesito tomar 1 como resultado (Tecla de menú principal).

Ejemplo 2: Si doy 30 como clave; Necesito tomar 21 como resultado. Cómo puedo hacerlo ? ¡Gracias por las respuestas!

Intenté como:

 var res = myData.filter(function f(o) { if (o.key === dragKey) return true; if (o.children) { return (o.children = o.children.filter(f)).length; } }); console.log(res); // Its giving main whole data main level to child level. I need just 1 upper level data.
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Podrías usar la recursividad para esto. Bucle a través del objeto con

 const findObjectByKey = (parent, object, key) => { // make object optional because the first iteration is null if (object?.key === key) return parent for (const obj of Object.entries(object.children)) { return findObjectByKey(object, obj, key) } } const finalparent = findObjectByKey(null, object, 30)

NOTA: Este es un pseudocódigo no probado solo para darle una idea de cómo lo resolvería.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Debe escribir una función recursiva que tome una matriz como entrada. Recorra los elementos de la matriz y verifique si la clave coincide, si lo hace, devuelve un resultado que declara que ha encontrado al niño. Luego, en el padre, devuelva la identificación del padre en cada llamada para que tenga la identificación del padre al final. De lo contrario, llama a la función misma con los hijos del nivel actual. Espero que entiendas la idea detrás de esto. Si no sabe cómo funcionan las funciones recursivas, simplemente búsquelo en Google y apréndalo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo que haría es usar la recursividad para revisar cada objeto anidado y verificar si hay some niños con la clave que está buscando.

 function getParentKey(arr, key, index = 0) { if (!Array.isArray(arr[index].Children)) return; if (arr[index].Children.some(child => child.Key === key)) return arr[index].Key; return getParentKey(arr[index], key, index + 1); } console.log(getParentKey(mydata, "10"));

Aquí un ejemplo de trabajo

 const mydata = [{ "Name": "Main Menu", "Key": "1", "Children": [{ "Name": "Sub Menu 1", "Key": "10", "Children": [{ "Name": "Very Sub Menu", "Key": "20", "Children": [] }] }] }, { "Name": "Main Menu 2", "Key": "2", "Children": [{ "Name": "Sub Menu 2", "Key": "11", "Children": [{ "Name": "Very Sub Menu 2", "Key": "21", "Children": [{ "Name": "Extra Small Menu", "Key": "30", "Children": [] }] }] }] }] function getParentKey(arr, key, index = 0) { if (!Array.isArray(arr[index].Children)) return; if (arr[index].Children.some(child => child.Key === key)) return arr[index].Key; return getParentKey(arr[index], key, index + 1); } console.log(getParentKey(mydata, "10"));

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