Enforces return statements in callbacks of array's methods (array-callback-return)
Array
has several methods for filtering, mapping, and folding. If we forget to write return
statement in a callback of those, it's probably a mistake.
// 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
This rule enforces usage of return
statement in callbacks of array's methods.
Rule Details
This rule finds callback functions of the following methods, then checks usage of return
statement.
Array.from
Array.prototype.every
Array.prototype.filter
Array.prototype.find
Array.prototype.findIndex
Array.prototype.map
Array.prototype.reduce
Array.prototype.reduceRight
Array.prototype.some
Array.prototype.sort
- And above of typed arrays.
Note: this rule finds by the method name, so the object which has the method might not be an array.
The following patterns are considered problems:
var indexMap = myArray.reduce(function(memo, item, index) { /*error Expected to return a value in this function.*/
memo[item] = index;
}, {});
var foo = Array.from(nodes, function(node) { /*error Expected to return a value at the end of this function.*/
if (node.tagName === "DIV") {
return true;
}
});
var bar = foo.filter(function(x) {
if (x) {
return true;
} else {
return; /*error Expected a return value.*/
}
});
The following patterns are considered not problems:
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"));
When Not To Use It
If you don't want to warn about usage of return
statement in callbacks of array's methods, then it's safe to disable this rule.
Version
This rule was introduced in ESLint 2.0.0-alpha-1.