Timo Müller
Timo Müller

Reputation: 5

Combining 4 Boolean Values In A Simple Function Or Condition

I have 4 boolean values.

next_is_left
next_is_right
next_is_above
next_is_below

First I want to check if they are all true. Then I want to check if one of them is false. Then if two of them are false, then three or if all are false.

I wonder how I can fit this problem in one simple if condition / function. Thanks.

Upvotes: 0

Views: 306

Answers (4)

cnexans
cnexans

Reputation: 994

Use arrays to do the work.

var booleans = [
  next_is_left
  next_is_right
  next_is_above
  next_is_below
];

var holdsTrue = function(arg) { return arg; };
var holdsFalse = function(arg) { return !arg; };


var theyAreAllTrue = booleans.filter(holdsTrue).length === booleans.length;
var oneOfThemIsFalse = booleans.filter(holdsFalse).length > 0;
var twoOfThemIsFalse = booleans.filter(holdsFalse).length > 1;
var threeOfThemIsFalse = booleans.filter(holdsFalse).length > 2;
var theyAreAllFalse = booleans.filter(holdsFalse).length === booleans.length;

Also with lodash you have every, some, negate, identity and size

var theyAreAllTrue = every(booleans, identity)
var theyAreAllFalse = every(booleans, negate(identity));
var numberOfFalseOnes = size(filter(booleans, negate(identity)))
var numberOfTrueOnes = size(filter(booleans, identity))

var oneOfThemIsTrue = some(booleans, identity)
var oneOfThemIsFalse = some(booleans, negate(identity))

Upvotes: 0

Uma
Uma

Reputation: 846

you can use every method for Array to check whether all of them are true or false, and filter to see how many

var next_is_left = true;
var next_is_right = true;
var next_is_above = true;
var next_is_below = true;

var sides = [
  next_is_left,
  next_is_right,
  next_is_above,
  next_is_below,
];

sides.every(n => n === true); // checks if all true
sides.every(n => n === false); // checks if all false
sides.filter(n => n === false).length; // returns number of false variables

Upvotes: 0

rafaelgomesxyz
rafaelgomesxyz

Reputation: 1405

What about counting the number of true values and using switch case to deal with the result?

let next_is_left = false;
let next_is_right = true;
let next_is_above = true;
let next_is_below = false;

switch (getNumTrue(next_is_left, next_is_right, next_is_above, next_is_below)) {
    case 0:
        console.log(`All false`);
        break;
    case 1:
        console.log(`1 true, 3 false`);
        break;
    case 2:
        console.log(`2 true, 2 false`);
        break;
    case 3:
        console.log(`3 true, 1 false`);
        break;
    case 4:
        console.log(`All true`);
        break;
}    

function getNumTrue() {
    let i, numTrue;
    numTrue = 0;
    for (i = arguments.length - 1; i > -1; i--) {
        numTrue += arguments[i] ? 1 : 0;
    }
    return numTrue;
}

Upvotes: 0

Jonas Wilms
Jonas Wilms

Reputation: 138457

 switch(next_is_left + next_is_right + next_is_above + next_is_below){
   case 0:
     console.log("all false");
     break;
   case 1:
     console.log("one true");
     break;
   case 2:
     console.log("two true");
     break;
   case 3:
     console.log("one false");
     break;
   case 0:
     console.log("all true");
     break;

 }

Just add the booleans up.

Upvotes: 3

Related Questions