Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

93
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda