Marty
Marty

Reputation: 544

Get count of true values in JSON with javascript

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

Answers (4)

Mamun
Mamun

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

Sk96
Sk96

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

brk
brk

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

CertainPerformance
CertainPerformance

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

Related Questions