Javascript - 我应该如何计算循环的结果?

Pro*_*bie 1 javascript for-loop

假设停车场收取2美元的最低费用停车长达3小时,然后停车场每小时收取0.5美元的额外费用.例如,停车5小时收费2美元+ 0.5美元+ 0.5美元= 3美元

我该如何计算循环的费用?

Dar*_*rov 5

没有必要使用for循环:

function calculateFee(hours) {
    if (isNaN(hours) || hours <= 0) return 0;
    if (hours <= 3) return 2;
    var additionalHours = Math.round(hours - 3);
    return 2 + 0.5 * additionalHours;
}

var fee = calculateFee(5);
Run Code Online (Sandbox Code Playgroud)

如果使用for循环是一个要求:

function calculateFee(hours) {
    if (isNaN(hours) || hours <= 0) return 0;
    var result = 2;
    if (hours <= 3) return result;
    var additionalHours = Math.round(hours - 3);
    for (i = 0; i < additionalHours; i++) {
        result += 0.5;          
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

最后一个使用对象的例子:

function FeeCalculator(minimalFee, initialHours, additionalHourFee) {
    if (isNaN(minimalFee) || minimalFee <= 0) { throw "minimalFee is invalid"; }
    if (isNaN(initialHours) || initialHours <= 0) { throw "initialHours is invalid"; }
    if (isNaN(additionalHourFee) || additionalHourFee <= 0) { throw "additionalHourFee is invalid"; }
    this.minimalFee = minimalFee;
    this.initialHours = initialHours;
    this.additionalHourFee = additionalHourFee;
}

FeeCalculator.prototype = {
    calculateFee: function(hours) {
        if (hours <= this.initialHours) return this.minimalFee;
        var additionalHours = Math.round(hours - this.initialHours);
        return this.minimalFee + this.additionalHourFee * additionalHours;          
    }
};

var calculator = new FeeCalculator(2, 3, 0.5);
var fee = calculator.calculateFee(5);
Run Code Online (Sandbox Code Playgroud)