Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

122
Views
En mecanografiado, el filtrado de la matriz no funciona.
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

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

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); });
about 4 years ago · Juan Pablo Isaza Report

0

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:

  • Cree un objeto que contenga filtros en forma de Set s.
  • Filtre elementos donde todos los filtros sean aplicables usando Array.prototype.every .

 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);

about 4 years ago · Juan Pablo Isaza Report

0

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)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!