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

91
Views
Haga coincidir múltiples campos de objetos con un valor de entrada en JS

Estoy trabajando en grandes conjuntos de datos de productos y necesito filtrar la lista de productos según el valor de entrada del usuario. El conjunto de datos de mi producto se parece a esto:

 const products = [ {id: 0, name: "Product1", brand: "Theraflu", itemCode: "THE110", price: 5.45}, {id: 1, name: "Product2", brand: "Benadryl", itemCode: "BEN121", price: 7.05}, {id: 2, name: "Product3", brand: "Listerine", itemCode: "LIS204", price: 4.55}, {id: 3, name: "Product4", brand: "Tylenol", itemCode: "TYL116", price: 6.10}, ];

Pude filtrar la lista de productos según los diferentes campos disponibles en cada objeto de producto individual como este:

 const keys = ["name", "brand", "itemCode"]; const getFilteredProducts = (filterText) => { const newProducts = products.filter(product => keys.some(key => product[key].toLowerCase().includes(filterText.toLowerCase()))); return newProducts; } console.log(getFilteredProducts("Tylenol"));

Este código realmente funciona cuando filtro el producto según el campo individual. Sin embargo, cuando trato de combinar diferentes campos como:

 console.log(getFilteredProducts("product4 Tylenol"));

El valor devuelto de esto es una matriz vacía. ¿Hay alguna manera de lograr esto sin alterar la funcionalidad de filtrado existente?

about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

Parece que tendrá que buscar cada palabra del filterText por sí solo. Tal vez algo como esto:

 const keys = ["name", "brand", "itemCode"]; const getFilteredProducts = (filterText) => { const filterWords = filterText.split(" "); const newProducts = []; for (const word of filterWords) { newProducts.push( products.filter(product => keys.some(key => product[key].toLowerCase().includes(word.toLowerCase()) )) ); } return [].concat(...newProducts).filter((value, index, self) => self.findIndex((m) => m.id === value.id) === index ); } console.log(getFilteredProducts("Tylenol Product3"));
about 4 years ago · Santiago Gelvez 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!