javascript - 警告 ESLint 规则下的意外未命名函数 func-names
问题描述
我的eslint
版本是 4.18.2,它会给出这样的警告:
意外的未命名函数
需要赋值或函数调用,但看到的是表达式
以这种方式定义函数时:
const farmerIds = a.reduce((function (hash) {
return function (prev, curr) {
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
return prev;
};
}(Object.create(null))), []);
解决方案
这是两个不同的问题……</p>
意外的未命名函数
正如康斯坦丁所指出的,这就是 ESLint 规则func-names。
如果您不想禁用此规则,您可以为您的函数使用名称,如下所示:
const farmerIds = a.reduce((function reducer(hash) {
return function fn(prev, curr) {
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
return prev;
};
}(Object.create(null))), []);
或者,我个人建议使用箭头函数:
const farmerIds = a.reduce(
(hash => {
return (prev, curr) => {
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
return prev;
};
})(Object.create(null)),
[]
);
期望一个赋值或函数调用,而是看到一个表达式
ESLint 正在抱怨这一行,这确实是一个表达式,而不是赋值或函数调用:
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
您可以将其重写为if
语句:
if (!hash[curr.farmerId]) {
hash[curr.farmerId] = prev.push(curr);
}
修复两者
将上面的代码示例放在一起,这段代码应该在没有 ESLint 抱怨的情况下运行:
const farmerIds = a.reduce(
(hash => (prev, curr) => {
if (!hash[curr.farmerId]) {
hash[curr.farmerId] = prev.push(curr);
}
return prev;
})(Object.create(null)),
[]
);
请注意,我还删除了第一个箭头函数主体周围的花括号,这是箭头的一个很好的附加功能,可以使代码更简洁。
推荐阅读
- javascript - 条件语句速记的问题
- python - 如何使用 python 购买有限的 roblox?
- flutter - 如何将 Flutter 滑块双精度值转换为 int
- webpack - 我应该如何使用 Rails 6 和 Webpack 导入 Bootstrap?
- reactjs - React 并发模式是否允许派生状态?
- angular - 从数组列表的第一行以角度显示
- python - 根据其他两列的值将值应用于列
- django - Django Rest 框架中的自定义用户模型注册
- node.js - MongoDb / 查找 + 更新文档
- heroku - 如何防止 Heroku H12 在 Java REST 服务器上长时间运行进程的“请求超时”