tengo una matriz como esta
const array = [ { name: 'Parent Brand 1', childBrands: [ { name: 'Child Brand 1', status: 'active' }, { name: 'Child Brand 2', status: 'discontinued' }, ] } , { name: 'Parent Brand 2', childBrands: [ { name: 'Child Brand 1', status: 'discontinued' }, { name: 'Child Brand 2', status: 'active' }, ] } ];¿Cómo hago para que filtre las marcas secundarias por estado y devuelva el objeto principal? Después de filtrar por estado 'activo' debería devolver algo como esto,
const array = [ { name: 'Parent Brand 1', childBrands: [ { name: 'Child Brand 1', status: 'active' }, ] } , { name: 'Parent Brand 2', childBrands: [ { name: 'Child Brand 2', status: 'active' }, ] } ]; El uso de un flatMap y un filter solo devuelve los elementos secundarios cuando necesito el objeto principal, incluido el elemento secundario
{ "name": "Child Brand 1","status": "active" } { "name": "Child Brand 2","status": "active" }Como no ha publicado ningún código, es difícil saber cómo usaría flatMap() en este caso. Simplemente puede map() sobre la matriz y filtrar cada propiedad de matriz anidada.
const array = [{ name: 'Parent Brand 1', childBrands: [{ name: 'Child Brand 1', status: 'active' }, { name: 'Child Brand 2', status: 'discontinued' },] }, { name: 'Parent Brand 2', childBrands: [{ name: 'Child Brand 1', status: 'discontinued' }, { name: 'Child Brand 2', status: 'active' },] }]; const filtered = array.map(parent => ({ ...parent, childBrands: parent.childBrands.filter(child => child.status === 'active') })); console.log(filtered)Utiliza Array#map en la matriz principal y Array#filter en las matrices secundarias de la siguiente manera:
const array = [ { name: 'Parent Brand 1', childBrands: [ { name: 'Child Brand 1', status: 'active' }, { name: 'Child Brand 2', status: 'discontinued' }, ] } , { name: 'Parent Brand 2', childBrands: [ { name: 'Child Brand 1', status: 'discontinued' }, { name: 'Child Brand 2', status: 'active' }, ] } ], output = array.map( ({childBrands,...rest}) => ({ ...rest, childBrands:childBrands.filter( ({status}) => status === 'active' ) }) ); console.log( output );