I have the following problem: my function always returns the default value, no matter what I try. When I use if/else statements everything works fine. Where is the failure?
function auswertung(stueckzahl) {
var preis1 = 0.77;
var preis2 = 0.76;
var preis3 = 0.73;
var preis4 = 0.69;
var preis5 = 0.67;
switch(stueckzahl) {
case ((stueckzahl>=500) && (stueckzahl <= 1000)): {
return preis1;
}
case ((stueckzahl >= 1001) && (stueckzahl <= 2500)): {
return preis2;
}
case ((stueckzahl >= 2501) && (stueckzahl <= 5000)): {
return preis3;
}
case ((stueckzahl >= 5001) && (stueckzahl <= 10000)): {
return preis4;
}
case ((stueckzahl >= 10001) && (stueckzahl <= 30000)): {
return preis5;
}
default: {
return preis1;
}
}
}
document.write (auswertung(10000));
You can perfectly use a switch with a boolean true
as expression to re-evaluate your cases one by one.
This way your code stays clean:
function auswertung(stueckzahl) {
switch (true) {
case stueckzahl >= 10001 && stueckzahl <= 30000:
return 0.67;
case stueckzahl >= 5001 && stueckzahl <= 10000:
return 0.69;
case stueckzahl >= 2501 && stueckzahl <= 5000:
return 0.73;
case stueckzahl >= 1001 && stueckzahl <= 2500:
return 0.76;
case stueckzahl >= 500 && stueckzahl <= 1000:
default:
return 0.77;
}
}
console.log('500:', auswertung(500));
console.log('10000:', auswertung(10000));
console.log('30000:', auswertung(30000));
If you are passing an expression to the case
statement then it is evaluated first.
As per spec
Let exprRef be the result of evaluating Expression.
Let switchValue be GetValue(exprRef).
So,
(stueckzahl>=500) && (stueckzahl <= 1000)
will be either true
or false
.
Which means unless stueckzahl
is true/false
, it will always go to default
section.
You need to replace this switch
statements with if/else
by doing. (also just check the upper limit in every condition)
if ( stueckzahl <= 1000) {
return preis1;
}
if ( stueckzahl <= 2500 ) {
return preis2;
}
if ( stueckzahl <= 5000 ) {
return preis3;
}
if ( stueckzahl <= 10000 ) {
return preis4;
}
if ( stueckzahl <= 30000 ) {
return preis5;
}
else {
return preis1;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With