Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

188
Views
Obtener padre, abuelo y clave en la estructura de objetos anidados profundos

Tengo una estructura profundamente anidada en el objeto javascript sin ninguna matriz.

 var data = { bar: 'a', child: { b: 'b', grand: { greatgrand: { c: 'c' } } } }; let arr = []; const findParentGrandparent = (obj, target) => { Object.entries(obj).forEach(child => { if (typeof child[1] === 'object') { findParentGrandparent(child[1]); } }); }; findParentGrandparent(data, 'c');

Cuando llamo a la función con un objetivo, quiero obtener la clave objetivo en sí, padre y abuelo. Por ejemplo, si el objetivo es 'c', arr debería convertirse en

 ['c', 'greatgrand', 'grand', 'child'];

si el objetivo es 'tataranieto', debería convertirse

 ['greatgrand', 'grand', 'child'];

Gracias

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puedes usar una función generadora recursiva:

 function* get_vals(d, target, c = []){ for (var i of Object.keys(d)){ if (i === target){ yield [target, ...c.slice(0, 3)] } if (typeof d[i] === 'object'){ yield* get_vals(d[i], target, c = [i, ...c]) } } } var result = get_vals(data, 'c').next().value

Producción:

 ["c", "greatgrand", "grand", "child"]
about 4 years ago · Juan Pablo Isaza Report

0

 var data = { bar: 'a', child: { b: 'b', grand: { greatgrand: { c: 'c' } } } }; /** * @param validate {boolean} = true - Pass true if need to check for existance of `target` */ const findParentGrandparent = (obj, target, validate = true) => { let result = []; for (let [key, value] of Object.entries(obj)) { if (key === target) { result.push(key); break; } if (value.toString() === '[object Object]') { result.push(key); result = result.concat(findParentGrandparent(value, target, false)) } } if (validate && !result.includes(target)) { return 'Not found'; } return result; }; let resultC = findParentGrandparent(data, 'c').reverse(); let resultGreatgrand = findParentGrandparent(data, 'greatgrand').reverse(); console.log('Result for "c":', resultC); console.log('Result for "greatgrand":', resultGreatgrand);

about 4 years ago · Juan Pablo Isaza Report

0

Lo hice usando su patrón recursivo, también puede cambiar la forma en que maneja los errores, aquí tiro si no hay resultado.

 var data = { bar: 'a', child: { b: 'b', grand: { greatgrand: { c: 'c' } } } }; let arr = []; const findParentGrandparent = (obj, target) => { for (const child of Object.entries(obj)) { if (typeof child[1] === 'object' && child[0] !== target) { const result = findParentGrandparent(child[1], target); return [...result, child[0]]; } else if (child[0] === target) { return [child[0]]; } }; throw new Error("not found"); // If it goes there the object is not found, you can throw or return a specific flag, as you wish. }; console.log(findParentGrandparent(data, 'c'));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!