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

233
Vistas
¿Cómo eliminar matrices vacías en una matriz/objeto anidado?

Tengo una matriz de objetos que tienen una matriz dentro de sí mismos. Quiero recorrer el objeto y eliminar las matrices vacías que tengo. El objeto se muestra a continuación:

 let a=[{children:[{children:[1,2]},{children:[5,6]}]}, {children:[{children:[]},{children:[5,6]}]}, {children:[{children:[]},{children:[]}]}, {children:[]}]

Estoy tratando de lograr el resultado deseado aplicando el código a continuación, pero recibo un error que dice que no puedo leer la propiedad 'hijos' de undefined.

 function removeEmpty(array){ for(var i=array.length-1;i>=0;i--){ if(array[i].children){ if(array[i].children.length){ for(var j=array[i].children.length-1;j=>0;j--){ if(array[i].children[j].children){ removeEmpty(array[i].children[j]) }else{ array[i].splice[j,1] } } if(!array[i].children.length){ array.splice(i,1) } }else{ array.splice(i,1) } } } } removeEmpty(a)

Gastos esperados:

 expected outcome =[{children:[{children:[1,2]},{children:[5,6]}]}, {children:[{children:[5,6]}]}]

Si hay ajustes que puedo hacer al código existente o usar un enfoque diferente, házmelo saber. Gracias.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Para lograr su objetivo, puede usar el método .reduce() .

 const a = [{ children: [{ children: [1, 2] }, { children: [5, 6] }] }, { children: [{ children: [] }, { children: [5, 6] }] }, { children: [{ children: [] }, { children: [] }] }, { children: [] } ] const b = a.reduce((previousValue, currentValue) => { const data = [] if (currentValue.children.length > 0) { currentValue.children.forEach((e) => { if (e.children.length > 0) data.push(e); }); } if (data.length > 0) previousValue.push({children: data}); return previousValue; }, []); console.log(b);

about 4 years ago · Santiago Gelvez Denunciar

0

Aquí hay una función de poda que reduce un node con children . Solo asegúrese de envolver los datos entrantes en un nodo con elementos children .

Para cada uno de los elementos secundarios de los nodos, filtra los elementos secundarios en función del recuento de elementos secundarios.

 const data = [ { children: [{ children: [1,2] }, { children: [5,6] }] }, { children: [{ children: [] }, { children: [5,6] }] }, { children: [{ children: [] }, { children: [] }] }, { children: [] }, ]; const prune = (node, key = 'children') => node[key].reduce((prev, curr) => (children => children.length ? { [key]: [...prev[key], { [key]: children }] } : prev) (curr[key].filter(child => child[key].length)), { [key]: [] }); const tree = prune({ children: data }); tree.children.forEach(child => console.log(JSON.stringify(child)));
 .as-console-wrapper { top: 0; max-height: 100% !important; } .as-console-row-code { font-size: smaller !important; }

about 4 years ago · Santiago Gelvez 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