filtervalue = { serviceLine:['cca','ga'] } this.inProgresDetailsData = [{serviceLine:'cca'}, { serviceLine:'cca'}, { serviceLine:'bca'}] this.hrResourceDetailsdata= this.inProgresDetailsData.filter(item => { for (let index = 0; index < filterValue.serviceLine.length; index++) { item.serviceLine == filterValue.serviceLine[index] } });`this.hrResourceDetailsdata está vacío al filtrar
La función Array.prototype.filter ( documentación ) espera que return un valor booleano que decida si conservar o no el elemento actual.
Dado que originalmente no está devolviendo ningún valor, implícitamente devuelve undefined que, cuando se compara con un booleano, se resuelve en false , por lo tanto, todos los elementos de su matriz se descartan uno por uno, sin dejar ninguno.
Desea devolver el valor booleano para que esto funcione:
this.hrResourceDetailsdata = this.inProgresDetailsData.filter(item => { for (let index = 0; index < filterValue.serviceLine.length; index++) { if (item.serviceLine == filterValue.serviceLine[index]) { return true; // return true if found, otherwise continue } } return false; // filter is never found in loop, fall back to false }); Además, puede usar Array.prototype.includes ( documentación ) para simplificar su verificación, el siguiente código hace exactamente lo mismo:
this.hrResourceDetailsdata = this.inProgresDetailsData.filter(item => { // return true if `item.serviceLine` is inside `filterValue.serviceLine` return filterValue.serviceLine.includes(item.serviceLine); });Puede crear un conjunto a partir de filterValue.serviceLine y filtrar los elementos que están presentes en el conjunto.
const filterValue = { serviceLine: ["cca", "ga"] }, inProgressDetailsData = [ { serviceLine: "cca" }, { serviceLine: "cca" }, { serviceLine: "bca" }, ], filterSet = new Set(filterValue.serviceLine), hrResourceDetailsdata = inProgressDetailsData.filter(({ serviceLine }) => filterSet.has(serviceLine) ); console.log(hrResourceDetailsdata);Si desea aplicar varios filtros, entonces:
Set s. const filterValue = { serviceLine: ["cca", "ga"], urgency: ["medium", "high"], }, filterSet = Object.fromEntries( Object.entries(filterValue).map(([k, v]) => [k, new Set(v)]) ), inProgressDetailsData = [ { id: 1, urgency: "low", serviceLine: "cca" }, { id: 2, urgency: "medium", serviceLine: "cca" }, { id: 3, urgency: "low", serviceLine: "bca" }, { id: 4, urgency: "high", serviceLine: "ga" }, { id: 5, urgency: "low", serviceLine: "abc" }, ], hrResourceDetailsdata = inProgressDetailsData.filter((data) => Object.entries(filterSet).every(([k, v]) => v.has(data[k])) ); console.log(hrResourceDetailsdata);Código
filtervalue = { serviceLine:['cca','ga'] }; this.inProgresDetailsData = [ { serviceLine:'cca'}, { serviceLine:'cca'}, { serviceLine:'bca'} ]; this.hrResourceDetailsdata = this.inProgresDetailsData.filter(item => { return filtervalue.serviceLine.includes(item.serviceLine) }); console.log(this.hrResourceDetailsdata)