javascript - ¿Podemos usar la función .filter() con reglas condicionales para las propiedades buscadas?
Supongamos que tenemos la siguiente función .filter:
search(searchQuery: string) {
let results = myArray.filter(item =>
item.title.toLowerCase().includes(searchQuery) ||
item.description.toLowerCase().includes(searchQuery)
);
return results;
}
Para este ejemplo podemos considerar que item no siempre tiene una propiedad description, sino solo algunas veces. En este caso, la función fallará con un error:
ERROR TypeError: No se puede leer la propiedad 'toLowerCase' de undefined
¿Cómo podemos seguir buscando en el array e incluir la propiedad description en la búsqueda solo si existe? ¿Es esto posible dentro de la función .filter()?
Respuesta #1
Podrías tomar un valor predeterminado.
Ya sea directamente
(item.description || '').toLowerCase().includes(searchQuery)
o tomar una desestructuración con valores predeterminados.
results = myArray.filter(({ title = '', description = '' }) =>
title.toLowerCase().includes(searchQuery) ||
description.toLowerCase().includes(searchQuery)
);
Respuesta #2
Puedes hacer algo así:
const myArray = [
{
title: 'Test 123',
},
{
title: 'Test 123',
description: 'test',
},
{
title: 'What',
},
{
title: 'Fix',
description: '456123',
},
];
const search = (text) => {
let results = myArray.filter(item => {
if (item.description) {
return item.title.toLowerCase().includes(text) || item.description.toLowerCase().includes(text);
}
});
return results;
}
const results = search('test');
console.log(results);