Reputation: 544
I have a JSON object like this:
filters: {
module: {
value: "All",
active: false
},
dates: {
value: [],
active: true
}
}
How to count active filters, based on this object?
Upvotes: 3
Views: 3378
Reputation: 68923
You can use Object.keys()
and filter()
var filters = {
module: {
value: "All",
active: false
},
dates: {
value: [],
active: true
}
}
var active = Object.keys(filters).filter(k => filters[k].active);
console.log(active.length)
Upvotes: 1
Reputation: 113
You can try this
var filters = {
module: {
value: "All",
active: false
},
dates: {
value: [],
active: true
}
};
console.log(Object.values(filters).filter(element => element.active === true).length)
Hope this helps !
Upvotes: 0
Reputation: 50326
Get all the keys inside the filters using Object.keys
which will give an array and then use reduce
function to count the number of active true
let someObj = {
filters: {
module: {
value: "All",
active: false
},
dates: {
value: [],
active: true
}
}
};
let count = Object.keys(someObj.filters).reduce(function(acc, curr) {
if (someObj.filters[curr].active === true) {
acc += 1;
}
return acc;
}, 0);
console.log(count)
Upvotes: 1
Reputation: 370989
Use reduce
to iterate over the values
of each object, extract the active
property from each, and add that boolean to the accumulator, which will coerce it to a number:
const obj = {
filters: {
module: {
value: "All",
active: false
},
dates: {
value: [],
active: true
},
foo: {
value: "All",
active: false
},
bar: {
value: [],
active: true
}
}
};
console.log(
Object.values(obj.filters).reduce((a, { active }) => a + active, 0)
);
Upvotes: 3