Estoy tratando de encontrar la forma más limpia de implementar un filtro en una matriz de objetos según una palabra clave de cadena. Necesito devolver aquellos objetos cuyas únicas propiedades específicas contengan el valor de la cadena.
Digamos que tengo la siguiente matriz de objetos:
const products = [ { name: 'car', price: 100, image: 'someurl' email: 'car@car.car' available: true, }, { name: 'phone', price: 200, image: 'someurl' email: 'phone@phone.phone' available: false, }, { name: 'bottle', price: 300, image: 'someurl' email: 'bottle@bottle.bottle' available: true, }, ];Como se menciona aquí: filtrar la matriz de objetos cuyas propiedades contienen un valor
Una de las formas más limpias de hacer coincidir cualquier valor en una matriz de objetos cuyas propiedades tienen diferentes tipos sería:
function filterByValue(array, string) { return array.filter(o => Object.keys(o).some(k => String(o[k]).toLowerCase().includes(string.toLowerCase()))); }Esta función filterByValue devolverá aquellos objetos cuyas propiedades coincidan con el valor de la cadena.
Sin embargo, me gustaría agregar algunas condiciones, por lo que solo itera y busca alguna coincidencia en las propiedades "nombre", "precio" y "correo electrónico", sin mirar las propiedades "imagen" y "disponible".
Haga una matriz de las propiedades para mirar y mírelas en lugar de usar Object.keys .
const propsToCheck = ['name', 'price', 'email']; function filterByValue(array, string) { return array.filter(o => propsToCheck.some(k => String(o[k]).toLowerCase().includes(string.toLowerCase()) ) ); }