Versions

array-callback-return

Enforce return statements in callbacks of array methods

Array 有几种过滤、映射和折叠的方法。 如果我们忘记在这些回调中写上 return 语句,那可能是个错误。如果你不想使用返回,或者不需要返回的结果,可以考虑使用 .forEach 代替。

// 示例: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 语句的用法。

此规则的错误示例:

Open in Playground
/*eslint array-callback-return: "error"*/

var indexMap = myArray.reduce(function(memo, item, index) {
    memo[item] = index;
}, {});

var foo = Array.from(nodes, function(node) {
    if (node.tagName === "DIV") {
        return true;
    }
});

var bar = foo.filter(function(x) {
    if (x) {
        return true;
    } else {
        return;
    }
});

此规则的正确示例:

Open in Playground
/*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 回调。

allowImplicit

使用 { "allowImplicit": true } 选项的正确示例:

Open in Playground
/*eslint array-callback-return: ["error", { allowImplicit: true }]*/
var undefAllTheThings = myArray.map(function(item) {
    return;
});

checkForEach

使用 { "checkForEach": true } 选项的错误示例:

Open in Playground
/*eslint array-callback-return: ["error", { checkForEach: true }]*/

myArray.forEach(function(item) {
    return handleItem(item)
});

myArray.forEach(function(item) {
    if (item < 0) {
        return x;
    }
    handleItem(item);
});

myArray.forEach(item => handleItem(item));

myArray.forEach(item => {
    return handleItem(item);
});

使用 { "checkForEach": true } 选项的正确示例:

Open in Playground
/*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);
});

已知限制

这条规则检查给定名称的方法的回调函数,即使拥有该方法的对象不是数组。

何时不用

如果你不想 警告在数组方法的回调中使用 return 语句。,禁用此规则毫无风险。

Version

This rule was introduced in ESLint v2.0.0-alpha-1.

Resources

更改语言