javascript - 如何将 JavaScript 中函数的认知复杂度从 10 降低到 6
问题描述
我在降低此函数的认知复杂性时遇到了麻烦。我尝试将其中的内容分离forEach
为另一个函数并在getCars
函数中调用它,但失败了。有人可以帮忙吗?
const getCars = (cars, config, types) => {
const {
carName
} = types;
const carObject = {};
const carsRange = () => {}
let carRange = carsRange(cars);
Object.entries(cars).forEach(([key, value]) => {
if (key === 'sedan' && value) {
const carRangeVal = value.split(' ');
const year = carRangeVal[1];
const model = carRangeVal[0].substring(1, 2);
carRange = generateCarRange(year, model);
}
if (key === 'suv' && value) {
const carRangeVal = value.split(' ');
const year = carRangeVal[1];
const model = carRangeVal[0];
carObject['model'] = true;
carRange = checkYear(year, model);
}
if (value) {
carObject[key] = value;
}
});
if (
config.header === 'TEST A' ||
config.header === 'TEST B'
) {
carObject['carName'] = carName[0].id;
}
carObject['configName'] = config.header;
carObject['contractStartDate'] = carsRange[0];
carObject['contractEndDate'] = carsRange[1];
return carObject;
};
console.log(getCars({}, {}, {}));
解决方案
您可以缩短 .forEach 函数中的代码:
[year,model] = value.split(' '); // destructuring assignment
if (key === 'sedan' && value) {
model = model.substring(1, 2);
carRange = generateCarRange(year, model);
}
if (key === 'suv' && value) {
carObject['model'] = true;
carRange = checkYear(year, model);
}
了解输入数据会很有帮助。
我有一个暗示,你最好使用.map()
而不是.forEach()
.
为什么你有两个函数(generateCarRange()
和checkYear()
)要得到carRange
?
(我发现使用匈牙利表示法总是知道我的变量的类型很有帮助。)
推荐阅读
- caching - AEM Dispatcher 缓存规则
- android-studio - EditText 多重编辑填充检查
- reactjs - 如何使用 reactjs 和 typescript 将 prop 指定为可选?
- css - 时间轴 CSS 卡片序列
- amazon-web-services - 如何以用户身份在 Ceph 中创建主题
- react-native - React Native Navigation - 添加 headerRight 导致标题从左侧推开
- c# - 多个可选参数,包括 ASP.NET Core Web API 路由中的枚举类型
- solr - 仅查询期间的 Apache Solr 同义词
- javascript - 在 create-react-app 中启用生产中的 javascript 源映射
- azure - Azure 托管标识 - 凭据翻转信息