javascript - 为了提高代码性能... ESLint 报告“箭头函数的复杂度为 21。允许的最大值为 20”
问题描述
ESLint 报告了令人无法忍受的高复杂性。我想知道为什么它太复杂了?如果我只是将它拆分为多个功能会发生什么 - 那是高性能的吗?据我所知,我们总是必须编写缩小代码,所以如果我们将其拆分为多个函数,它会消耗更多空间(位)和更多执行时间?
处理此代码段的最佳做法是什么。
const getWeekType = (f, d, e) => {
const y = moment(),
a = moment(f),
i = moment(d);
if (d && f && i.diff(a, 'days') <= 8 && y.diff(a, 'days') < 8 && y.diff(a, 'days') >= 0) {
return { weekNum: 0, dayNum: y.diff(a, 'days') };
}
if (f && y.diff(a, 'days') >= 0 && y.diff(a, 'days') < 8 && (!d || i.diff(a, 'days') > 8)) {
return { weekNum: 1, dayNum: y.diff(a, 'days') };
}
if (d && !f && i.diff(y, 'days') >= 0 && i.diff(y, 'days') < 8) {
return { weekNum: 2, dayNum: 6 - i.diff(y, 'days') };
}
if ((!f || y.diff(a, 'days') > 8) && (!d || i.diff(y, 'days') > 8)) {
let d = y.diff(f ? a : moment(e), 'days');
for (; d > 7; ) d -= 7;
return { weekNum: 3, dayNum: d };
}
};
解决方案
两个问题:
- 变量名没有意义
diff
多次调用
我真的不知道代码应该做什么,但这里是它的外观草图:
const getWeekType = (start, end, alternative) => {
const now = moment(),
startMoment = moment(start),
endMoment = moment(end),
days = endMoment.diff(startMoment, 'days'),
daysPast = now.diff(startMoment, 'days'),
daysFuture = endMoment.diff(now, 'days');
if (end && start && days <= 8 && daysPast >= 0 && daysPast < 8) {
return { weekNum: 0, dayNum: daysPast };
}
if (start && daysPast >= 0 && daysPast < 8 && (!end || days > 8)) {
return { weekNum: 1, dayNum: daysPast };
}
if (end && !start && daysFuture >= 0 && daysFuture < 8) {
return { weekNum: 2, dayNum: 6 - daysFuture };
}
if ((!start || daysPast > 8) && (!end || daysFuture > 8)) {
let dayNum = start ? daysPast : now.diff(moment(alternative), 'days');
return { weekNum: 3, dayNum: dayNum % 7 };
}
};
推荐阅读
- php - Laravel - 在 RouteServiceProvider.php 中访问中间件
- reactjs - 图像或字体真棒作为选择中的选项 - Reactjs
- python - vuex 状态管理在使用 django 实现多页面应用程序时有用吗?
- android - 如果用户的互联网关闭,如何更改数据库值
- python - 无法在 python 列表中附加字典列表
- jquery - 具有多个输入的日期选择器
- javascript - 将字符串化数组转换为数组
- path - 如何使用 Graphhopper 获得两个节点之间的所有可能路径
- git - git clone --recurse-submodules 记录子模块的绝对路径
- javascript - 从 html5 画布生成的图像无法保存在 chrome 中