Tengo una variedad de objetos en los que necesito filtrar por estado
const data = [ { id:1, name:"data1", status: { open:1, closed:1, hold:0, block:1 } }, { id:2, name:"data2", status: { open:1, closed:0, hold:4, block:1 } }, { id:3, name:"data3", status: { open:0, closed:0, hold:4, block:0 } } ]los estados están en una matriz
const statuses = ['open','closed']Tendría que filtrar todos los datos que contengan un estado abierto y cerrado mayor que 0. Entonces, el resultado sería
const result = [ { id:1, name:"data1", status: { open:1, closed:1, hold:0, block:1 } }]Este es mi intento,
const result = data.filter(item => { return ( statuses.forEach(val => { if (item.status[val] > 0) return item }) ) })Estoy seguro de que me estoy perdiendo algo aquí y agradecería cualquier tipo de ayuda. Gracias
Puede lograr su objetivo utilizando todos los métodos en lugar de forEach , así:
const data = [ { id:1, name:"data1", status: { open:1, closed:1, hold:0, block:1 } }, { id:2, name:"data2", status: { open:1, closed:0, hold:4, block:1 } }, { id:3, name:"data3", status: { open:0, closed:0, hold:4, block:0 } } ]; const statuses = ['open','closed']; const result = data.filter( ({status}) => statuses.every(key => status[key] > 0) ); console.log(result)Suponiendo que open y close siempre son iguales o mayores que 0 :
const data=[{id:1,name:"data1",status:{open:1,closed:1,hold:0,block:1}},{id:2,name:"data2",status:{open:1,closed:0,hold:4,block:1}},{id:3,name:"data3",status:{open:0,closed:0,hold:4,block:0}}]; let result = data.filter(e => e.status.open && e.status.closed) console.log(result)Pruebe este enfoque:
const opened = data.filter((item) => item.status.open === 1);puede agregar su propio filtro de control interno. devolverá una matriz con el objeto encontrado.