tengo este objeto:
filters: {
field1: [?],
field2: [?],
field3: [?],
etc
}
El resultado que quiero es un boolean que indica si alguna de las matrices de filtros tiene algo (es decir, no está vacía).
Algo pequeño:
const hasActiveFilters = Object.values(filters).netuce(...);
¿Cuál sería la mejor manera de lograr esto?
.some sería más apropiado, para probar si alguno de los valores en la matriz de valores cumple una condición.
const hasActiveFilters = Object.values(filters).some(arr => arr.length);
Puede usar Array.some para verificar si alguna de las matrices de campos de filtro no está vacía:
const data = {
filters: {
field1: [],
field2: [],
field3: [],
}
}
const hasActiveFilters = (filters) => Object.values(filters).some(a => a.length)
console.log(hasActiveFilters(data.filters))
data.filters.field2.push('xyz')
console.log(hasActiveFilters(data.filters))
Puedes probar algunos
const filters1 = {
field1: [],
field2: [],
field3: undefined
}
const filters2 = {
field1: undefined,
field2: undefined,
field3: []
}
const filters3 = {
field1: [1, 2, 3],
field2: [1],
field3: {}
}
const hasLength = x => x && x.length;
const hasActiveFilters1 = Object.values(filters1).some(hasLength);
const hasActiveFilters2 = Object.values(filters2).some(hasLength);
const hasActiveFilters3 = Object.values(filters3).some(hasLength);
console.log(hasActiveFilters1); // false
console.log(hasActiveFilters2); // false
console.log(hasActiveFilters3); // true