entonces estoy tratando de configurar un filtro anidado en una matriz de objetos. Lo que pasa es que el filtro se aplica dentro del objeto en una clave que es otra matriz de objetos.
aquí está el código:
const items = [ { name: "123", id: 1, value: true, arr: [{ id: 1 }] }, { name: "456", id: 2, value: false, arr: [{ id: 2 }] }, { name: "456", id: 2, value: false, arr: [{ id: 3 }] }, { name: "456", id: 2, value: false, arr: [{ id: 4 }] }, { name: "456", id: 2, value: false, arr: [{ id: 5 }] }, { name: "456", id: 2, value: false, arr: [{ id: 6 }] }, ]; const newArray = items.filter((objects) => { objects.arr.filter((item) => { if (item.id === 2) { return objects; } }); }); console.log(newArray);No estoy seguro de dónde colocar el retorno porque en esta situación solo obtengo una matriz vacía.
Debe verificar que la matriz anidada contenga la id deseada y devolver el resultado al método de filtro.
const items = [{ name: "123", id: 1, value: true, arr: [{ id: 1 }] }, { name: "456", id: 2, value: false, arr: [{ id: 2 }] }, { name: "456", id: 2, value: false, arr: [{ id: 3 }] }, { name: "456", id: 2, value: false, arr: [{ id: 4 }] }, { name: "456", id: 2, value: false, arr: [{ id: 5 }] }, { name: "456", id: 2, value: false, arr: [{ id: 6 }] }], result = items.filter(({ arr }) => arr.some(({ id }) => id === 2)); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Use Array#some para verificar si el arr actual tiene un elemento con id igual a 2:
const items = [ { name: "123", id: 1, value: true, arr: [{ id: 1 }] }, { name: "456", id: 2, value: false, arr: [{ id: 2 }] }, { name: "456", id: 2, value: false, arr: [{ id: 3 }] }, { name: "456", id: 2, value: false, arr: [{ id: 4 }] }, { name: "456", id: 2, value: false, arr: [{ id: 5 }] }, { name: "456", id: 2, value: false, arr: [{ id: 6 }] } ]; const newArray = items.filter(({ arr = [] }) => arr.some(({ id }) => id === 2) ); console.log(newArray);Como contiene solo un object en arr , puede acceder a este objeto utilizando el índice [0] .
Demostración de trabajo:
const items = [ { name: "123", id: 1, value: true, arr: [{ id: 1 }] }, { name: "456", id: 2, value: false, arr: [{ id: 2 }] }, { name: "456", id: 2, value: false, arr: [{ id: 3 }] }, { name: "456", id: 2, value: false, arr: [{ id: 4 }] }, { name: "456", id: 2, value: false, arr: [{ id: 5 }] }, { name: "456", id: 2, value: false, arr: [{ id: 6 }] }, ]; const newArray = items.filter((obj) => { if (obj.arr[0].id === 2) { return obj; } }); console.log(newArray); Le respondí según el problema al que se enfrenta, pero si tiene varios objetos en su arr , puede continuar con el método Array.some() como lo sugieren otras respuestas.