This simple problem gives me an error. Does not get the correct answer. I will be glad if you help.
let point = 90;
switch (point) {
case point >= 51 && point <= 60:
console.log('Your price: E');
break;
case point >= 61 && point <= 70:
console.log('Your price: D');
break;
case point >= 71 && point <= 80:
console.log('Your price: C');
break;
case point >= 81 && point <= 90:
console.log('Your price: B');
break;
case point >= 91 && point <= 100:
console.log('Your price: A');
break;
default:
console.log('You did not pass');
}
Output: You did not pass
Advertisement
Answer
this way
let point = 90;
switch (true) {
case point >= 51 && point <= 60:
console.log('Your price: E');
break;
case point >= 61 && point <= 70:
console.log('Your price: D');
break;
case point >= 71 && point <= 80:
console.log('Your price: C');
break;
case point >= 81 && point <= 90:
console.log('Your price: B');
break;
case point >= 91 && point <= 100:
console.log('Your price: A');
break;
default:
console.log('You did not pass');
}can you explain why we write
true? – Hussein Nadjafli (PO)
The JS switch only works on strict equality.
switch (A) {
case ‘x1’: ...
case ‘x2’: ...
is equivalent to
if (A === ’x1’) { ...
else if (A === ’x2’) { ...
in your code you replace the possible values [’x1’,’x2’,…] with an evaluation like
(point >= 61 && point <= 70)
which returns either true or false
so your code becomes:
if (A === (point >= 51 && point <= 60)) { ...
else if (A === (point >= 61 && point <= 70)) { ...
by replacing the A by true you therefore have a comparison between:
if (true === (point >= 51 && point <= 60)) { ...
else if (true === (point >= 61 && point <= 70)) { ...
You can also do:
function codePrice(val)
{
let code = 'ABCDE'[10 - Math.ceil(val / 10)]
return (!!code) ? `Your price: ${code}` :'You did not pass'
}
console.log( codePrice(90) )