Tengo una matriz de nivel profundo como la siguiente,
const cat = [ { name: "cat 1", id: 1, subCat: [ { name: "sub 1", id: 10, subSubCat: [ { summary: "summary1", id: 20 }, { summary: "summary2", id: 21 }, ], }, ], }, { name: "cat 2", id: 2, subCat: [ { name: "sub 2", id: 20, subSubCat: [ { summary: "summary1", id: 30 }, { summary: "summary2", id: 31 }, ], }, ], }, ];Tengo que filtrar con subSubCat id (31) y debería devolver un valor de resumen (summary2).
Puede usar Array.map y Array.flat para obtener la lista de subSubCat, luego use Array.find para encontrar el elemento de subSubCat por id.
const cat = [ { name: "cat 1", id: 1, subCat: [ { name: "sub 1", id: 10, subSubCat: [ { summary: "summary1", id: 20 }, { summary: "summary2", id: 21 }, ], }, ], }, { name: "cat 2", id: 2, subCat: [ { name: "sub 2", id: 20, subSubCat: [ { summary: "summary1", id: 30 }, { summary: "summary2", id: 31 }, ], }, ], }, ]; var subSubCats = cat.map(item => item.subCat.map(subCatItem => subCatItem.subSubCat)).flat(2); var result = subSubCats.find(e => e.id == 31); console.log(result.summary);Esto parece algo que requiere un bucle de dos niveles y find() .
const cat = [ { name: "cat 1", id: 1, subCat: [ { name: "sub 1", id: 10, subSubCat: [ { summary: "summary1", id: 20 }, { summary: "summary2", id: 21 }, ], }, ], }, { name: "cat 2", id: 2, subCat: [ { name: "sub 2", id: 20, subSubCat: [ { summary: "summary1", id: 30 }, { summary: "summary2", id: 31 }, ], }, ], }, ]; for(let i =0 ; i < cat.length;i++){ if(Array.isArray(cat[i].subCat)){ let subCatArray = cat[i].subCat; //console.log(subCatArray); for(let j =0 ; j < subCatArray.length;j++){ let subSubArray = subCatArray[j].subSubCat; if(Array.isArray(subSubArray)){ //console.log(subSubArray); let foundObject = subSubArray.find((x) => x.id === 31 ); //console.log(foundObject); if(foundObject!==undefined) { console.log(foundObject.summary); break; } } } } }