Reputation: 31
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
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
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
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