Javascript 如何降低函数的圈复杂度
我有一个复杂度大于12的函数。我试图降低它的复杂性。我四处搜索,但找不到太有用的东西。有可能降低这种复杂性吗?-如果是这样,我将如何着手这样做 下面是函数Javascript 如何降低函数的圈复杂度,javascript,sonarqube,Javascript,Sonarqube,我有一个复杂度大于12的函数。我试图降低它的复杂性。我四处搜索,但找不到太有用的东西。有可能降低这种复杂性吗?-如果是这样,我将如何着手这样做 下面是函数 function sea(name) { +1 if (name === 'sa') { +1 return 'SA'; +1 } else if (name === 'uk') { +1 return 'UK'; +1
function sea(name) { +1
if (name === 'sa') { +1
return 'SA'; +1
} else if (name === 'uk') { +1
return 'UK'; +1
} else if (name === 'northkorea') { +1
return 'NK'; +1
} else if (name === 'hongkong') { +1
return 'HK'; +1
} else {
var rs = new RegExp(/\w);
return name.replace(rs, function(up) { +1
return up.charAt(0);
});
}
}```
我认为没有必要更改此函数。它本身很好,易于阅读,也易于测试。不管这个消息来自什么工具,只要把它标记为假阳性就行了
如果每个条件都有不同的变量,我的推理就会完全不同。但是,由于if-then-else的序列类似于一个简单的表查找,所以它确实是一个错误的工具。它应该根据人类真正难以理解的东西来衡量复杂性。其中一个例子是嵌套很深的if语句。您可能可以使用一个对象来存储这些国家/地区值(如字典),类似这样的操作应该可以完成:
const国家={
美国:“美国”,
英国:“联合王国”
//…你想要的所有其他国家
}
功能countryCaps(国家/地区){
如果(国家[国家]){
返回国[国家];
}否则{
//…此处是您的正则表达式替换函数
}
}
const country=countryCaps(“美国”);
控制台日志(国家)代码>您可以执行以下操作:
//代码重构
功能外观(国家){
常量国家={
南非,
英国:“联合王国”,
朝鲜:"朝鲜",,
澳:"澳洲",,
香港:"香港"
};
const toUpperCaseFirstLetter=c=>c.replace(新的RegExp(/\w/),s=>s.charAt(0.toUpperCase());
返回国[国家]| | toUpperCaseFirstLetter(国家);
}
//测试:
[
"sa",,
“英国”,
"香港",,
“西班牙”//这在sonarqube中不起作用,需要以某种方式将复杂性从12降低到10登录sonarqube,将问题标记为假阳性,完成。如果您没有这样做的权限,这是组织的错误。