JS获取区间值问题。

switch (voltage) {
        case voltage < 11.10:
            capacity = '0'
            break;
        case voltage >= 11.10 && voltage < 11.20:
            capacity = '5'
            break;
        case voltage >= 11.20 && voltage < 11.30:
            capacity = '10'
            break;
        case voltage >= 11.30 && voltage < 11.40:
            capacity = '15'
            break;
        case voltage >= 11.40 && voltage < 11.50:
            capacity = '20'
            break;
        case voltage >= 11.50 && voltage < 11.60:
            capacity = '25'
            break;
        case voltage >= 11.60 && voltage < 11.70:
            capacity = '30'
            break;
        case voltage >= 11.70 && voltage < 11.80:
            capacity = '35'
            break;
        case voltage >= 11.80 && voltage < 11.90:
            capacity = '40'
            break;
        case voltage >= 11.90 && voltage < 12.00:
            capacity = '45'
            break;
        case voltage >= 12.00 && voltage < 12.10:
            capacity = '50'
            break;
        case voltage >= 12.10 && voltage < 12.20:
            capacity = '55'
            break;
        case voltage >= 12.20 && voltage < 12.30:
            capacity = '60'
            break;
        case voltage >= 12.30 && voltage < 12.40:
            capacity = '65'
            break;
        case voltage >= 12.40 && voltage < 12.50:
            capacity = '70'
            break;
        case voltage >= 12.50 && voltage < 12.60:
            capacity = '75'
            break;
        case voltage >= 12.60 && voltage < 12.70:
            capacity = '80'
            break;
        case voltage >= 12.70 && voltage < 12.80:
            capacity = '85'
            break;
        case voltage >= 12.80 && voltage < 12.90:
            capacity = '90'
            break;
        case voltage >= 12.90 && voltage < 13.00:
            capacity = '95'
            break;
        case voltage >= 13.00:
            capacity = '100'
            break;
    };

现在写法如上,占用了太多空间,请教有没有简短的,或者更好的写法获取区间的值?

阅读 3.6k
2 个回答

这样稍微减少一丢丢吧。


function formatVoltage (voltage) {
  if (voltage < 11.1) {
    return 0
  } else if (voltage > 13) {
    return 100
  }
  return parseInt(((parseInt(voltage * 10) - 111) + 1) * 5)
}
console.log(formatVoltage(11.1))  // 5
console.log(formatVoltage(13.1))  // 100
console.log(formatVoltage(12.45665412))  // 70

首先我们capacity和voltage是有规律的,即voltage每增长0.1,capacity就会增长5,根据这个规律,可以直接按照公式来计算:

function getCapacity1(voltage) {
    let capacityBase = 0;
    let capacityDiff = 5; // 增长度为5
    let voltageBase = 11;

    if (voltage < voltageBase) {
        return capacityBase;
    }
    return Math.min(Math.floor((voltage - voltageBase) * 10) * capacityDiff, 100);
}

如果capacity是不规律增长的,可以设定一个数组,然后循环,判定voltage最后落到哪个区间里:

function getCapacity2(voltage) {
    // 记得把data补全
    let data = [
        {
            max: 11.0,
            capacity: 0
        },
        {
            max: 11.2,
            capacity: 5
        },
        {
            max: 11.3,
            capacity: 10
        },
        {
            max: 11.4,
            capacity: 15
        },
        {
            max: Number.MAX_SAFE_INTEGER, // 数字中的最大值
            capacity: 100
        }
    ];

    for(let i=0, len=data.length; i<len; i++) {
        if (voltage < data[i].max) {
            return data[i].capacity;
        }
    }
}

最后我们来写一个循环调用刚才的方法,看看输出的是不是正确的:

for(let i=10.9; i<=13.2; i+=0.05) {
    console.log(i.toFixed(2), getCapacity1(i), getCapacity2(i));
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题