10

Hi i am trying to find the sum of Boolean values in the object array in JavaScript

My json like be

var myoBj = [{
  "id": 1,
  "day": 1,
  "status": true
}, {
  "id": 2,
  "day": 1,
  "status": false
}, {
  "id": 3,
  "day": 1,
  "status": false
}, {
  "id": 4,
  "day": 3,
  "status": false
}];

i want the sum of all status values using reduce function in JavaScript/ typescript

i want to show overall status as true only when all status are true else it should be false

  • 2
    Sum of boolean, what you mean ? – Pranav C Balan Jan 19 '17 at 10:43
  • @PranavCBalan i want to show overall status as true only when all status are true else it should be false – Sathya V Jan 19 '17 at 11:58
  • 3
    Why .reduce()..? There is an array functor especially tailored for this job called .every(). – Redu Jan 19 '17 at 12:32
25
var result = myObj.reduce((sum, next) => sum && next.status, true);

This should return true, if every value is true.

|improve this answer|||||
  • This solution seems to be neat and simple , Thanks Balint – Sathya V Jan 19 '17 at 12:58
  • 16
    @SathyaV Maybe neat and simple, but can't beat myObj.every(item => item.status) – pawel Jan 19 '17 at 13:10
9

If you want to sum lets say, day items value depending on the status flag, this can looks like:

var result = myObj.reduce((res, item) => item.status ? res + item.day : res, 0);

Update 1

For overall status in case of all statuses are true you should use every method:

var result = myObj.every(item => item.status);
|improve this answer|||||
  • i want to show overall status as true only when all status are true else it should be false – Sathya V Jan 19 '17 at 11:58
  • Thanks TSV for the solution – Sathya V Jan 19 '17 at 13:46
0

If you must use reduce you can take advantage of the fact that x*false == 0, and so you can do the following:

const myObj=[{id:1,day:1,status:true},{id:2,day:1,status:false},{id:3,day:1,status:false},{id:4,day:3,status:false}],

res = !!myObj.reduce((bool, {status}) => bool*status, true);
console.log(res);

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.