array-callback-return
在数组方法的回调函数中强制使用 `return` 语句
💡 hasSuggestions
此规则报告的一些问题可以通过编辑器建议手动修复。
Array
有多种方法用于过滤、映射和折叠。如果我们在这些方法的回调函数中忘记编写 `return` 语句,这可能是一个错误。如果您不想使用 return 或不需要返回的结果,请考虑改用 .forEach。
// example: convert ['a', 'b', 'c'] --> {a: 0, b: 1, c: 2}
var indexMap = myArray.reduce(function(memo, item, index) {
memo[item] = index;
}, {}); // Error: cannot set property 'b' of undefined
规则详情
此规则强制在数组方法的回调函数中使用 `return` 语句。此外,它还可以通过使用 `checkForEach` 选项强制 `forEach` 数组方法回调函数**不**返回值。
此规则查找以下方法的回调函数,然后检查 `return` 语句的使用情况。
Array.from
Array.prototype.every
Array.prototype.filter
Array.prototype.find
Array.prototype.findIndex
Array.prototype.findLast
Array.prototype.findLastIndex
Array.prototype.flatMap
Array.prototype.forEach
(可选,基于 `checkForEach` 参数)Array.prototype.map
Array.prototype.reduce
Array.prototype.reduceRight
Array.prototype.some
Array.prototype.sort
Array.prototype.toSorted
- 以及上述类型化数组。
此规则的**错误**代码示例
在代码运行环境中打开
/*eslint array-callback-return: "error"*/
var indexMap = myArray.reduce((memo, item, index) {
memo[item] = index;
}, {});
var foo = Array.from(nodes, (node) {
if (node.tagName === "DIV") {
return true;
}
});
var bar = foo.filter(function(x) {
if (x) {
return true;
} else {
}
});
此规则的**正确**代码示例
在代码运行环境中打开
/*eslint array-callback-return: "error"*/
var indexMap = myArray.reduce(function(memo, item, index) {
memo[item] = index;
return memo;
}, {});
var foo = Array.from(nodes, function(node) {
if (node.tagName === "DIV") {
return true;
}
return false;
});
var bar = foo.map(node => node.getAttribute("id"));
选项
此规则接受一个包含三个选项的配置对象
"allowImplicit": false
(默认)设置为 `true` 时,允许需要返回值的方法的回调函数隐式返回 `undefined`,其中 `return` 语句不包含表达式。"checkForEach": false
(默认)设置为 `true` 时,规则还将报告返回值的 `forEach` 回调函数。"allowVoid": false
(默认)设置为 `true` 时,允许 `forEach` 回调函数中的 `void`,因此规则将不会报告带有 `void` 运算符的返回值。
注意: 只有当 `checkForEach` 选项设置为 `true` 时,{ "allowVoid": true }
才会生效。
allowImplicit
{ "allowImplicit": true }
选项的**正确**代码示例
在代码运行环境中打开
/*eslint array-callback-return: ["error", { allowImplicit: true }]*/
var undefAllTheThings = myArray.map(function(item) {
return;
});
checkForEach
{ "checkForEach": true }
选项的**错误**代码示例
在代码运行环境中打开
/*eslint array-callback-return: ["error", { checkForEach: true }]*/
myArray.forEach(function(item) {
});
myArray.forEach(function(item) {
if (item < 0) {
}
handleItem(item);
});
myArray.forEach(function(item) {
if (item < 0) {
}
handleItem(item);
});
myArray.forEach(item handleItem(item));
myArray.forEach(item void handleItem(item));
myArray.forEach(item => {
});
myArray.forEach(item => {
});
{ "checkForEach": true }
选项的**正确**代码示例
在代码运行环境中打开
/*eslint array-callback-return: ["error", { checkForEach: true }]*/
myArray.forEach(function(item) {
handleItem(item)
});
myArray.forEach(function(item) {
if (item < 0) {
return;
}
handleItem(item);
});
myArray.forEach(function(item) {
handleItem(item);
return;
});
myArray.forEach(item => {
handleItem(item);
});
allowVoid
{ "allowVoid": true }
选项的**正确**代码示例
在代码运行环境中打开
/*eslint array-callback-return: ["error", { checkForEach: true, allowVoid: true }]*/
myArray.forEach(item => void handleItem(item));
myArray.forEach(item => {
return void handleItem(item);
});
myArray.forEach(item => {
if (item < 0) {
return void x;
}
handleItem(item);
});
已知限制
此规则检查具有给定名称的方法的回调函数,即使拥有该方法的对象不是数组。
何时不使用它
如果您不想警告数组方法回调函数中 `return` 语句的使用情况,则可以安全地禁用此规则。
版本
此规则是在 ESLint v2.0.0-alpha-1 中引入的。