Cómo recorrer una matriz de objetos enésima cantidad de veces para que recorra toda la matriz secundaria de objetos si existe y obtenga su Id en orden.
let = [{ "id": "1", "child": [ { "id": "12", "child": [ { "id": "123", "child": [ { "id": "1234" } } ] }, { "id": "2", "child": [ { "id": "22" } ] }, { "id": "3" }, { "id": "4", "child": [ { "id": "42", "child": [ { "id": "43" } } ] } ] }]Rendimiento esperado
[1,12,123,1234,2,22,3,4,42,43]Mi intento, no funciona y no obtiene ninguna lógica.
result.reduce((pv, cv) => { console.log(cv) let temp = cv let arr = [] if(temp.hasOwnProperty("split")){ arr = temp.split pv.push(temp.id) // again arr should loop, I'm still finding some logic! } return pv }, [])Amablemente dé algunos pasos lógicos incluso si no quiere responder. ¡Lo intentaré!
Necesita una función recursiva con una variable persistente que apunte a la matriz. .reduce no es realmente el enfoque correcto aquí, y su prueba de temp.split no tiene ningún sentido: las dos propiedades en cuestión son id y child . Empuje incondicionalmente la ID (no dentro de if ), y si existe la matriz secundaria, llame a la función recursiva en ella.
const input=[{id:"1",child:[{id:"12",child:[{id:"123",child:[{id:"1234"}]}]},{id:"2",child:[{id:"22"}]},{id:"3"},{id:"4",child:[{id:"42",child:[{id:"43"}]}]}]}]; const getAllChildIds = (arr, ids = []) => { for (const { id, child } of arr) { ids.push(Number(id)); if (child) getAllChildIds(child, ids); } return ids; }; console.log(getAllChildIds(input));