范围的Switch语句不起作用

Switch statement for a range not working

本文关键字:不起作用 语句 Switch 范围      更新时间:2024-01-03

我在javascript中使用开关用例来查找范围,但它不起作用。我做错什么了吗?

function mapPriceRange(value){
    var range = '';
    switch(value)
    {
        case (value >= 0 && value <= 25):
            range = '0_25';
            break;
        case (value >= 25 && value <= 40):
            range = '25_40';
            break;
        case (value >= 40 && value <= 60):
            range = '40_60';
            break;
        case (value >= 60 && value <= 100):
            range = '60_100';
            break;
        case (value >= 100 && value <= 150):
            range = '100_150';
            break;
        case (value >= 150 && value <= 200):
            range = '150_200';
            break;
        case (value >= 200 && value <= 300):
            range = '200_300';
            break;
        case (value >= 300 && value <= 500):
            range = '300_500';
            break;
        case (value >= 500 && value <= 1000):
            range = '500_1000';
    }
    return range;
}
console.log(mapPriceRange(500));

我总是得到一根空绳子。

只需将switch(value)替换为switch(true)就可以了。请参见jsFiddle

使用以下代码

function checkRange(x, n, m) {
    if (x >= n && x <= m) { return x; }
    else { return !x; }
}
var x = 5;

    function mapPriceRange(value){
        var range = '';
        switch(value)
        {
             case checkRange(x, 0, 25):
                range = '0_25';
                break;
             case checkRange(x, 25, 40):
                range = '25_40';
                break;
             case checkRange(x, 40, 60):
                range = '40_60';
                break;
             case checkRange(x, 60, 100):
                range = '60_100';
                break;
             case checkRange(x, 100, 150):            
                range = '100_150';
                break;
             case checkRange(x, 150, 200):
                range = '150_200';
                break;
             case checkRange(x, 200, 300):
                range = '200_300';
                break;
             case checkRange(x, 300, 500):
                range = '300_500';
                break;
             case checkRange(x, 500, 1000):
                range = '500_1000';
        }
        return range;
    }
    console.log(mapPriceRange(500));

在Javascript中只切换带有字符串的用例。它们在比较switchcase中接收到的任何输入之前,都会将其强制为字符串。因此,在各种情况下,您的value.toString()会与"true"answers"false"字符串进行比较,在任何情况下都会返回false

使用ifElse梯形图是绕过它的最佳方法,请参阅任何其他答案以获得可能的解决方法,该解决方法依赖于返回value.toString()或切换到"true"而不是value