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

317
Views
Crear una jerarquía de matrices a partir de una matriz plana

Considere que tengo una matriz como esta

 const ar = [ {id: 1, name: "A", parent: null}, {id: 2, name: "B", parent: 1}, {id: 11, name: "AA", parent: 1}, {id: 12, name: "AB", parent: 1}, {id: 111, name: "AAA", parent: 11}, {id: 41, name: "CC", parent: 4}, {id: 4, name: "C", parent: 1}, ];

¿Cómo creo una jerarquía de un solo objeto como este?

 { id: 1, name: "A", parent: null, children: [ { id: 11, name: "AA", parent: 1, children: [ {id: 111, name: "AAA", parent: 11}], }, {id: 2, name: "B", parent: 1, children: []}, { id: 4, name: "C", parent: 1, children: [{id: 41, name: "CC", parent: 4, children: []}], }, ], }

La id en realidad no es un número en mi aplicación real. Es una cadena aleatoria por cierto.

Podría hacerlo de forma recursiva explorando la matriz de children , pero no es la forma más efectiva. ¿Alguien puede ayudar por favor?

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

0

 const ar = [ {id: 1, name: "A", parent: null}, {id: 2, name: "B", parent: 1}, {id: 11, name: "AA", parent: 1}, {id: 12, name: "AB", parent: 1}, {id: 111, name: "AAA", parent: 11}, {id: 41, name: "CC", parent: 4}, {id: 4, name: "C", parent: 1}, ]; const hierarchy = (arr) => { const map = {}; let root; for (const ele of arr) { map[ele.id] = ele; ele.children = []; } for (const ele of arr) { if (map[ele.parent] != undefined) map[ele.parent].children.push(ele); else root = ele; } return root; } console.log(hierarchy(ar));

about 4 years ago · Juan Pablo Isaza Report

0

Puede iterar a través de la matriz y empujar el elemento al lugar correcto cada vez.

Para obtener la raíz, puede recuperar el elemento sin padre.

 const arr = [{id: 1, name: "A", parent: null}, {id: 2, name: "B", parent: 1}, {id: 11, name: "AA", parent: 1}, {id: 12, name: "AB", parent: 1}, {id: 111, name: "AAA", parent: 11}, {id: 41, name: "CC", parent: 4}, {id: 4, name: "C", parent: 1}] arr.forEach(elem => elem.children = []) arr.forEach(elem => { if(elem.parent){ const parent = arr.find(x => x.id === elem.parent) if(parent)parent.children.push(elem) } }) console.log(arr.find(x => !x.parent))

Nota : si desea optimizar un poco más, puede agregar la matriz de niños en el segundo forEach

about 4 years ago · Juan Pablo Isaza Report

0

El primer paso es mapear los elementos por ID para que tenga una búsqueda fácil y no esté recorriendo la matriz varias veces. Después de eso, solo necesita recorrer y agregar una matriz de niños al padre y agregar la referencia.

 const ar = [ {id: 1, name: "A", parent: null}, {id: 2, name: "B", parent: 1}, {id: 11, name: "AA", parent: 1}, {id: 12, name: "AB", parent: 1}, {id: 111, name: "AAA", parent: 11}, {id: 41, name: "CC", parent: 4}, {id: 4, name: "C", parent: 1}, ]; // make a look up by the id const mapped = ar.reduce((acc, item) => { acc[item.id] = item; return acc; }, {}); // loop over const result = ar.reduce((acc, item) => { // if there there is no parent, we know it is the first so return it const parentId = item.parent; if (!parentId) return item; // if we have a parent, see if we found this yet, if not add the array mapped[parentId].children = mapped[parentId].children || []; // set the item as a child mapped[parentId].children.push(item); return acc; }, null); console.log(result)

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!