[英]How to reduce the complexity of this if else statements in Javascript?
我有以下場景,其中有多個 if else 條件。
以下代碼的圈復雜度顯示為 7。
是否有更好的方法來使用 Javascript 編寫以下代碼片段以降低代碼的復雜性?
function setTime() {
var currentTime = "3/4/2020, 2:53:42 PM"
var selectedTime = "3/5/2020, 2:53:42 PM"
if( Date.parse(currentTime) < Date.parse(selectedTime)) {
callThisMethod('Current time less than selected time');
} else if (Date.parse(currentTime) > Date.parse(selectedTime)) {
callThisMethod('Current time Greater than selected time');
} else {
callThisMethod('Current time is equal to selected time');
}
}
function callThisMethod(message) {
console.log(message);
}
setTime();
可能的選項之一:
const currentTime = new Date("3/4/2020, 2:53:42 PM"),
selectedTime = new Date("3/5/2020, 2:53:42 PM")
callThisMethod(`Current time is ${currentTime < selectedTime ? 'less than' : currentTime > selectedTime ? 'greater than' : 'equal to'} selected time`)
您可以先獲取 ISO 日期,然后比較這些日期。
function setTime() { var currentTime = "3/4/2020, 2:53:42 PM", selectedTime = "3/5/2020, 2:53:42 PM", current = new Date(currentTime).toISOString(), selected = new Date(selectedTime).toISOString(); if (current < selected) { callThisMethod('Current time less than selected time'); } else if (current > selected) { callThisMethod('Current time Greater than selected time'); } else { callThisMethod('Current time is equal to selected time'); } } function callThisMethod(message) { console.log(message); } setTime();
function setTime() {
var currentTime = "3/4/2020, 2:53:42 PM";
var selectedTime = "3/5/2020, 2:53:42 PM";
let a = new Date(currentTime).getTime();
let b = new Date(selectedTime).getTime();
let str = ['less than','is equal','greater than'];
let n = (a-b)/Math.abs(a-b) || 0;
callThisMethod(`Current time ${str[n]} selected time`);
}
function callThisMethod(message) {
console.log(message);
}
setTime();
根據https://jshint.com/ ,此函數的圈復雜度數為 2。
也許您應該編寫“以減少代碼”或“編寫更好的代碼”。 這個 if 或 else if 語句並不復雜。
實際上,為什么不從 if/else if 中 console.log 消息,並且避免調用另一個函數?
function setTime() {
var currentTime = "3/4/2020, 2:53:42 PM",
selectedTime = "3/5/2020, 2:53:42 PM",
current = new Date(currentTime).toISOString(),
selected = new Date(selectedTime).toISOString();
if (current < selected) {
console.log('Current time less than selected time');
} else if (current > selected) {
console.log('Current time Greater than selected time')
} else {
console.log('Current time is equal to selected time');
}
}
setTime();
這種方法可能有幾種可能的答案。 您可以做的一件事是保持條件不受評估。 因此,與其在條件表達式中解析日期,不如在比較之前解析它。 之后,您可以將最常見的條件,您認為可能經常出現的情況作為第一個條件,並使用二分搜索方法打破其他條件。 考慮以下代碼片段:
function setTime() {
var currentTime = Date.parse("3/4/2020, 2:53:42 PM")
var selectedTime = Date.parse("3/5/2020, 2:53:42 PM")
if(currentTime < selectedTime) {
callThisMethod('Current time less than selected time');
} else {
if (currentTime > selectedTime) {
callThisMethod('Current time Greater than selected time');
} else {
callThisMethod('Current time is equal to selected time');
}
}
}
function callThisMethod(message) {
console.log(message);
}
setTime();
請注意如何使用拆分技術將條件分解為多個部分。 或者您可以使用 switch case 而不是條件。 與 if-else 條件相比,已發現 switch case 在后續條件上花費的增量成本更少。 考慮以下片段:
function setTime() {
var currentTime = Date.parse("3/4/2020, 2:53:42 PM")
var selectedTime = Date.parse("3/5/2020, 2:53:42 PM")
switch(true){
case (currentTime > selectedTime):
callThisMethod('Current time Greater than selected time');
break;
case (currentTime < selectedTime):
callThisMethod('Current time less than selected time')
break;
default:
callThisMethod('Current time is equal to selected time')
}
}
function callThisMethod(message) {
console.log(message);
}
setTime();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.