Возвращаемое значение в колбэках массивов
Принудительное использование оператора `return` в колбэках методов массивов
Некоторые проблемы, обнаруженные этим правилом, могут быть исправлены вручную с помощью предложений редактора.
JavaScript предоставляет несколько методов для фильтрации, преобразования и обработки массивов. Если мы забываем написать оператор `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.
Это правило находит функции колбэков следующих методов и проверяет использование оператора `return`.
Array.fromArray.prototype.everyArray.prototype.filterArray.prototype.findArray.prototype.findIndexArray.prototype.findLastArray.prototype.findLastIndexArray.prototype.flatMap-
Array.prototype.forEach(необязательно, в зависимости от параметраcheckForEach) Array.prototype.mapArray.prototype.reduceArray.prototype.reduceRightArray.prototype.someArray.prototype.sortArray.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, правило также будет сообщать о колбэках, возвращающих значение. -
"allowVoid": false(по умолчанию) При установке в значениеtrue, позволяетvoidв колбэкахforEach, поэтому правило не будет сообщать о возвращаемом значении с оператором `return`.
Примечание: { "allowVoid": true } работает только если опция checkForEach установлена в значение 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.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/array-callback-return