GoldHatCarls
GoldHatCarls

Reputation: 31

My if/else conditions are not displaying as they should

I am currently learning Javascript and I went off script from my course to just play around with what knowledge I currently have attained.

As a challenge to see if I understood Control Flow and Functions parameters, I decided to make a Container Dock log. The idea is to log containers based on their arrival and docked time:

Based on that information, I made the following code:

// Containers type: Old and New based on 30min arrivals.

const containerDocked = (container,arrivalTime) => {
  newContainer = arrivalTime < 30;
  oldContainer = arrivalTime >= 30;
  if (newContainer) {
    console.log('New Container: ' + container + ' just arrived ' + arrivalTime + 'min ago.' );
  } 
    else if (oldContainer) {
      console.log('Docked Container: ' + container + ' has been docked for ' + arrivalTime + 'min.');
    }
    else if(container === false && arrivalTime === true) {
      console.log('A container that arrived '+ arrivalTime + 'mins ago, has not been logged!!!');
    }
    else if(container === true && arrivalTime === false) {
      console.log('Container: ' + container + 'has not been logged!!!');
    }
    else {
      console.log('Container has not been logged!!!!');
    }
};

containerDocked('John', 24);
containerDocked('Elizabeth', 57);
containerDocked('Harry', 30);
containerDocked('Mike');

It does seem to work, but as you can see "Mike" does not log, with on my if/else rules. Can you point me as to what I did wrong?

Upvotes: 1

Views: 71

Answers (3)

D. Pardal
D. Pardal

Reputation: 6597

I believe Mike dosen't log because you haven't specified the arrivalTime when calling containerDocked. This means that arrivalTime is undefined and all of those conditions you have return false, and the else block is executed.

Note that arrivalTime === false is false.

Upvotes: 0

mayank jain
mayank jain

Reputation: 84

You have to check wether arrivalTime is null or not in the else if statement.

// Containers type: Old and New based on 30min arrivals.

const containerDocked = (container,arrivalTime) => {
  newContainer = arrivalTime < 30;
  oldContainer = arrivalTime >= 30;
  if (newContainer) {
    console.log('New Container: ' + container + ' just arrived ' + arrivalTime + 'min ago.' );
  } 
    else if (oldContainer) {
      console.log('Docked Container: ' + container + ' has been docked for ' + arrivalTime + 'min.');
    }
    else if(container === false && arrivalTime === true) {
      console.log('A container that arrived '+ arrivalTime + 'mins ago, has not been logged!!!');
    }
    else if(container !=null && !arrivalTime) {
      console.log('Container: ' + container + ' has not been logged!!!');
    }
    else {
      console.log('Container has not been logged!!!!');
    }
};

containerDocked('John', 24);
containerDocked('Elizabeth', 57);
containerDocked('Harry', 30);
containerDocked('Mike');

Upvotes: 0

Nikhil Aggarwal
Nikhil Aggarwal

Reputation: 28475

Here is the fix

Problem with container === true and arrivalTime === true

// Containers type: Old and New based on 30min arrivals.

const containerDocked = (container,arrivalTime) => {
  newContainer = arrivalTime < 30;
  oldContainer = arrivalTime >= 30;
  if (newContainer) {
    console.log('New Container: ' + container + ' just arrived ' + arrivalTime + 'min ago.' );
  } 
    else if (oldContainer) {
      console.log('Docked Container: ' + container + ' has been docked for ' + arrivalTime + 'min.');
    }
    else if(!container && arrivalTime) {
      console.log('A container that arrived '+ arrivalTime + 'mins ago, has not been logged!!!');
    }
    else if(container && !arrivalTime) {
      console.log('Container: ' + container + 'has not been logged!!!');
    }
    else {
      console.log('Container has not been logged!!!!');
    }
};

containerDocked('John', 24);
containerDocked('Elizabeth', 57);
containerDocked('Harry', 30);
containerDocked('Mike');

Upvotes: 3

Related Questions