Javascript 基于一定规则的停车费计算算法

Javascript 基于一定规则的停车费计算算法,javascript,Javascript,我试图根据以下规则计算停车费 如果车辆停放时间少于0.5小时,费用为1美元 如果车辆停放时间超过0.5小时但少于4小时,费用为2美元 24小时的最高停车费为6美元 一些示例计算: For 10 minutes => $ 1 For 40 Minutes => $ 2 For 4.5 hours => $2 + $1 For 6 Hours => $2 + $2 For 16 Hours => $6 For 26 Hours => $6 + $2 我将费用

我试图根据以下规则计算停车费

  • 如果车辆停放时间少于0.5小时,费用为1美元
  • 如果车辆停放时间超过0.5小时但少于4小时,费用为2美元
  • 24小时的最高停车费为6美元
一些示例计算:

For 10 minutes => $ 1
For 40 Minutes => $ 2
For 4.5 hours => $2 + $1
For 6 Hours => $2 + $2
For 16 Hours => $6
For 26 Hours => $6 + $2
我将费用规则存储在一个JS数组中,如下所示

var rule = [{upto : 0.5, fee : 1}, {upto : 4, fee : 2}, {upto : 24, fee : 6}];
这条规则将来可能会改变。我希望算法只需更新
规则
数组即可应用新的费用规则


我正在使用
Math.abs
module%
操作符以及
规则
数组上的迭代,但没有一个能给我期望的结果。有人能帮我吗?

最好的方法是不要使用
开关
或多个
if-else
语句,而是使用更具声明性的方式:

rule.find(entry => hours < entry.upto).fee

您可以使用以下简单的方法:

var rule = [{upto : 0.5, fee : 1}, {upto : 4, fee : 2}, {upto : 24, fee : 6}]

function getFee(timeSpent) {
    var fee = rule[rule.length-1].fee;
    for (var i = rule.length - 2; i >= 0; i--) {
        if (rule[i].upto >= timeSpent) {
            fee = rule[i].fee;
        }
    }
    return fee;
}
total_days=total_hours/24
总成本=总天数*6(每天/24小时的最大成本为6)
小时数=总天数%24(剩余小时数,如有)

如果小时数>=8,小时数=4,小时数=0.5,小时数,此解决方案以分钟为标准化时间。这允许使用此单位计算休息时间,而无需转换

我建议检查某项费用的最高限额,以避免收取高额费用

函数获取费用(分钟){
返回规则.reduceRight((总和,{upto,fee},i,{[i+1]:更高的})=>{
变量计数=数学[i?'floor':'ceil'](分钟/最多);
如果(更高&计数*费用>更高.费用){
分钟=0;
退货金额+更高的费用;
}
分钟=数学最大值(0,分钟-最多*计数);
返回金额+计数*费用;
}, 0);
}
var规则=[{upto:30,费用:1},{upto:240,费用:2},{upto:1440,费用:6}];
console.log(getFee(10));//1.
console.log(getFee(40));//2.
console.log(getFee(270));//2 + 1
console.log(getFee(360));//2 + 2
console.log(getFee(960));//6.

console.log(getFee(1560));//6+2
实现这一点的方法有很多,但就我个人而言,我可能会使用小时或分钟作为键,以值作为费用来绘制数组映射。然后找到最后一个/最大的钥匙,它比你的停车时间小,这个值会给你带来费用。嗨,伙计,你能发布你到现在为止写的代码吗?如果用户把这个值设置为8小时,输出会是什么?如果没有一个“最多>小时”的规则,这将导致一个类型错误。这只是一个解决方案。如果“rule”数组为空或不包含足够大的“upto”值,我们可以使用角落大小写检查来检查您提到的无效数据和一些默认值。如果您包含代码+并显示了跳过升序版本,我会给您上一票。
total_days = total_hours / 24
total_cost = total_days * 6  (max cost 6 for every day/ 24hours)    
hours = total_days % 24 (remaining hours if any)    
if hours >= 8  and hours <= 24
total_cost += 6
else if hours >= 4 and hours <= 8
total_cost += 4
else if hours >= 0.5 and hours <= 4
total_cost += 2
else
total_cost += 1