Tengo el siguiente objeto de matriz. Me gustaría aplanar la matriz para obtener solo objetos con nombres que contengan 'Martin'
Matriz de origen:
[ { "id": 302, "name": "David Martin", "subordinates": [ { "id": 265, "name": "Martin Regan", }, { "id": 300, "name": "William Baker", }, { "id": 301, "name": "Anthony Mazzarino", "subordinates": [ { "id": 11245, "name": "Martin Lozano", } ] } ] }, { "id": 10441, "name": "Martin Delage De Luget" } ]Resultado Esperado:
[ { "id": 302, "userGuid": "66d6fd24-0e22-4384-9181-f72c4e81cefd", "name": "David Martin" }, { "id": 265, "name": "Martin Regan", }, { "id": 11245, "name": "Martin Lozano", } ]La recursividad es siempre una solución fácil en este tipo de casos:
flatElements = (array, keyword) => { // Recursive function const traverse = (subArray, acc = []) => { subArray.forEach(element => { const {id, name, subordinates} = element; // If object with certain condition push it in the resulting acc if (element.name.contains(keyword)) { acc.push({id, name}); } // If subordinates exist, traverse them deeply if (subordinates) { traverse(subordinates, acc); } }); // Return accumulator return acc; } return traverse(array, []); }