Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

101
Visualizações
Agrupe una matriz de objetos por ID de grupo

Tengo una variedad de objetos. Estos objetos deben agruparse según el ID de grupo. Además, es posible tener grupos anidados.

A continuación se muestra un ejemplo de la matriz y cómo quiero que se vea la matriz.

 [ { key: "1", label: "Random generated 0" }, { key: "2", groupId: "1", label: "Random generated 1" }, { key: "3", groupId: "1", label: "Random generated 2" }, { key: "4", groupId: "2", label: "Random generated 3" }, { key: "5", groupId: "2", label: "Random generated 4" }, { key: "6", label: "Random generated 5" }, { key: "7", label: "Random generated 6" } ];

Según la clave y el ID de grupo, debería aparecer una matriz anidada como este ejemplo

 [ { key: "1", label: "Random generated 0", children: [ { key: "2", groupId: "1", label: "Random generated 1", children: [ { key: "4", groupId: "2", label: "Random generated 3" }, { key: "5", groupId: "2", label: "Random generated 4" } ] }, { key: "3", groupId: "1", label: "Random generated 2" } ] }, { key: "6", label: "Random generated 5" }, { key: "7", label: "Random generated 6" } ];

¿Puedes ayudarme en la dirección correcta?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

puedes :

  1. crear una función recursiva que llene los niños de un elemento

     function fillChildren(elem) { var children = data.filter(oneData => oneData.groupId === elem.key); if (children.length) { elem.children = children; elem.children.map(fillChildren); } return elem; }
  2. combine array.filter y array.map para construir una estructura agrupada

     let grouped = data.filter(elem => !elem.groupId).map(fillChildren); 

 let data = [ { key: "1", label: "Random generated 0" }, { key: "2", groupId: "1", label: "Random generated 1" }, { key: "3", groupId: "1", label: "Random generated 2" }, { key: "4", groupId: "2", label: "Random generated 3" }, { key: "5", groupId: "2", label: "Random generated 4" }, { key: "6", label: "Random generated 5" }, { key: "7", label: "Random generated 6" } ]; function fillChildren(elem) { var children = data.filter(oneData => oneData.groupId === elem.key); if (children.length) { elem.children = children elem.children.map(fillChildren); } return elem; } let grouped = data.filter(elem => !elem.groupId).map(fillChildren); console.log(grouped)

about 4 years ago · Juan Pablo Isaza Relatório

0

Podría adoptar un enfoque estándar con un objeto para recopilar cada relación de hijo/padre y padre/hijo con un solo bucle.

La función getTree espera un conjunto de datos, el nombre de la propiedad para el id del objeto real, la propiedad principal, el nombre de los hijos deseados, si no son children y el valor raíz del padre, si no están undefined .

 const getTree = (data, id = 'id', parent = 'parent', children = 'children', root) => { const t = {}; data.forEach(o => ((t[o[parent]] ??= {})[children] ??= []).push(Object.assign(t[o[id]] ??= {}, o))); return t[root][children]; }, data = [{ key: "1", label: "Random generated 0" }, { key: "2", groupId: "1", label: "Random generated 1" }, { key: "3", groupId: "1", label: "Random generated 2" }, { key: "4", groupId: "2", label: "Random generated 3" }, { key: "5", groupId: "2", label: "Random generated 4" }, { key: "6", label: "Random generated 5" }, { key: "7", label: "Random generated 6" }], tree = getTree(data, 'key', 'groupId'); console.log(tree);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda