警告 ESLint 规则下出现意外的未命名函数 func-names
Warning Unexpected unnamed function func-names under, ESLint rule
我的eslint
版本是4.18.2,会出现这样的警告:
Unexpected unnamed function
Expected an assignment or function call and instead saw an expression
以这种方式定义函数时:
const farmerIds = a.reduce((function (hash) {
return function (prev, curr) {
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
return prev;
};
}(Object.create(null))), []);
这是两个不同的问题……
意外的未命名函数
正如 Constantin 所指出的,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)),
[]
);
请注意,我还删除了第一个箭头函数主体周围的花括号,这是箭头的一个很好的附加功能,可以使代码更加简洁。
如果需要不声明导出,可以如下使用
export default () => {
// your code goes here
}
另一种简单的方法是将 underscore
作为函数名。例如:
const farmerIds = a.reduce((function _(hash) {...}(...);
我的eslint
版本是4.18.2,会出现这样的警告:
Unexpected unnamed function
Expected an assignment or function call and instead saw an expression
以这种方式定义函数时:
const farmerIds = a.reduce((function (hash) {
return function (prev, curr) {
!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
return prev;
};
}(Object.create(null))), []);
这是两个不同的问题……
意外的未命名函数
正如 Constantin 所指出的,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)),
[]
);
请注意,我还删除了第一个箭头函数主体周围的花括号,这是箭头的一个很好的附加功能,可以使代码更加简洁。
如果需要不声明导出,可以如下使用
export default () => {
// your code goes here
}
另一种简单的方法是将 underscore
作为函数名。例如:
const farmerIds = a.reduce((function _(hash) {...}(...);