亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的程序效率不高,有沒有更短的方法來解決它?

我的程序效率不高,有沒有更短的方法來解決它?

素胚勾勒不出你 2023-10-14 10:03:43
由于我剛剛開始使用Javascript,我正在嘗試解決一些問題并提高自己。我就遇到過這樣的問題。我試圖從問題中一步一步地做所有事情,但我不認為我的代碼是有效的。有人可以幫我開發它嗎?問題:請編寫一個 JavaScript 函數,該函數接受兩個參數:停車“日期和時間”(時間戳)并返回“日期和時間”(時間戳)。在機場停車,適用以下規則。停車費;前 20 分鐘 2 歐元,最多 40 分鐘升至 4 歐元,最多一小時升至 6 歐元,最多兩小時內升至 7 歐元,漲至 9 歐元,持續長達三個小時,漲至 11 歐元,持續時間長達 4 小時,4-8 小時升至 13 歐元,8-24 小時漲至 15 歐元。前 24 小時 16 歐元,之后每天收費 9 歐元。這是我的代碼:   function msToHours(milisecond) {        let time = milisecond;        let hour = (time / 60000) / 60;        return hour;    }    //Mins to Hours Function    function minToHours(miniute){        let time = miniute;        let hr = (miniute /60);        return hr;    }    //Finding the nth day Function    function add24HR(hour, cb) {        let arr = new Array();        for (let i = 0; i < hour; i++) {            if (i % 24 == 0) {                arr.push(i)            }        }            return  `Your Parking Fee is £${(arr.length*cb-cb) + 16}.(${arr.length} days)`    }    //Main Function    const parkingFees = (parkingDate, returnDate) => {        //Defining dates        var park = new Date(parkingDate)        var returned = new Date(returnDate);        //Variables        var penaltyFee = 9;        let totalPrice;        //Time between park and return (miliseconds)        let totalTime = returned - park        //MiliSeconds to Hour        let totalPark = msToHours(totalTime);        //Mins to Hours        if (totalPark <= minToHours(20)) {            return `Your parking fee is only £${2}.`        }         else if(totalPark > minToHours(20) && totalPark <= minToHours(40)){            return `Your parking fee is only £${4}.`        }        else if(totalPark > minToHours(40) && totalPark <= minToHours(60)){            return `Your parking fee is only £${6}.`        }        else if(totalPark > minToHours(60) && totalPark <= minToHours(120)){            return `Your parking fee is only £${7}.`        }
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

您可以重構它以使用數組。然后,如果費用發生變化,您無需修改代碼,只需更改該數組中的價格即可:


const steps = [

  { limit:       20, fee:  2 }, // The limits are in minutes

  { limit:       40, fee:  4 },

  { limit:       60, fee:  6 },

  { limit:   2 * 60, fee:  7 },

  { limit:   3 * 60, fee:  9 },

  { limit:   4 * 60, fee: 11 },

  { limit:   8 * 60, fee: 13 },

  { limit:  24 * 60, fee: 15 }, // For complex rules, use a function:

  { limit: Infinity, fee: minutes => 9 * Math.ceil(minutes / 24 / 60) + 7 }

];


// Converts a date string to a number of minutes since 1970-01-01

const dateToMinutes = str => Math.floor(new Date(str).getTime() / 60000);


const calcFee = (parkingDate, returnDate) => {

  const minutesParked = dateToMinutes(returnDate) - dateToMinutes(parkingDate);

  for (let step of steps) {

    if (minutesParked <= step.limit) {

      return isNaN(step.fee) ? step.fee(minutesParked) : step.fee;

    }

  }

};


// Just for testing

const test = (x, y) => (document.body.innerHTML += `<p>${x} - ${y}<br><b>${formatDuration(x, y)}: €${calcFee(x, y)}</b></p>`); const formatDuration = (x, y) => { const d = dateToMinutes(y) - dateToMinutes(x); const res = {d: Math.floor(d / 24 / 60), h: Math.floor((d % (24 * 60)) / 60), m: d % 60}; return `${res.d} days ${res.h} hours ${res.m} min`; };


test("2020-05-12 18:30:00", "2020-05-12 18:40:00");

test("2020-05-12 18:30:00", "2020-05-12 19:00:00");

test("2020-05-12 18:30:00", "2020-05-12 19:30:00");

test("2020-05-12 18:30:00", "2020-05-13 18:29:00");

test("2020-05-12 18:30:00", "2020-05-13 18:31:00");

test("2020-05-12 18:30:00", "2020-05-18 18:30:00");


查看完整回答
反對 回復 2023-10-14
  • 1 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號