Necesito revisar la matriz y averiguar si mi matriz tiene elementos secundarios. Ejemplo cada vez que tengo una matriz como una:
[ id: 1, title: 'Parent', children : [ { id: 13, title: 'Child' } ]cada vez que tengo matriz:
[ id: 1, title: 'Parent', children : [ { id: 13, title: 'Child' }, { id: 14, title: 'Child two' } ]Para explicar mejor. Los elementos tienen sus elementos padre, hijo. ¿Cuál es mi tarea? Necesito encontrar todos los elementos que obtengo y ponerlos en una matriz por separado. Entonces, necesito extraer estos elementos secundarios de la matriz y colocarlos en una matriz donde están todos los elementos.
Después de recorrer la matriz anterior, necesito obtener una nueva matriz como:
DE :
[ id: 1, title: 'Parent', children : [ { id: 13, title: 'Child' }, { id: 14, title: 'Child two' } ]A
[ { id: 1, title: 'Parent', }, { id: 13, title: 'Child' }, { id: 14, title: 'Child two' } ]Aquí hay otra forma recursiva de hacerlo:
La función externa collect(arr) proporciona un ámbito para la función interna llamada recursivamente getItems() . Cada vez que se encuentra un elemento secundario, las propiedades id y title se ensamblan en un nuevo objeto y se insertan en la matriz de resultados res que se definió en collect() .
const data=[{id:1, title:'Parent', children:[{id:13, title:'Child'}, {id:14, title:'Child two', children: [{id:15, title:'Grandchild'}] }]}, {id:16, title:'Uncle'} ]; function collect(arr){ const ret=[]; function getItems(ob){ ret.push({id:ob.id,title:ob.title}); if (ob.children) ob.children.forEach(getItems); } arr.forEach(getItems) return ret } console.log(collect(data))Otra solución:
const data = [{"id":1,"title":"Parent","children":[{"id":13,"title":"Child"},{"id":14,"title":"Child two"}]}]; const flatObj = (arr) => arr.reduce((acc, { id, title, children }) => ([ ...acc, ...(children) ? [{ id, title }, ...flatObj(children)] : [{ id, title }] ]), []); console.log(flatObj(data)); .as-console-wrapper{min-height: 100%!important; top: 0}Dada una matriz de objetos en la que un objeto siempre tendrá id , title y puede tener o no los elementos children prop , el objetivo declarado/asumido es transformar esta matriz en una matriz que solo tiene id y title (incluidos los elementos id y title de los elementos secundarios). ).
Código de muestra
const getIdTitles = arr => ( arr.reduce( (f, i) => ( { ...f, [i.id] : i.title, ...( 'children' in i ? getIdTitles(i.children) : {} ) } ), {} ) );Acercarse
reduce... spread-operator para difundir primero los contenidos del agregador fid y el title del elemento de matriz actualchildren , recurseFragmento de código
const someArray = [{ id: 1, title: 'Parent', children : [ { id: 13, title: 'Child' }, { id: 14, title: 'Child two' } ] }]; const getIdTitles = arr => ( arr.reduce( (f, i) => ( { ...f, [i.id] : i.title, ...( 'children' in i ? getIdTitles(i.children) : {} ) } ), {} ) ); console.log(getIdTitles(someArray))