Ecmascript 6 如何满足lint规则&x27;数组回调返回';?
这是我的第一个剪辑:Ecmascript 6 如何满足lint规则&x27;数组回调返回';?,ecmascript-6,eslint,Ecmascript 6,Eslint,这是我的第一个剪辑: const planLimits = {plan1: {condition1: 50, ...}} function initialisePlanLimits(planLimits) { const limits = new Map(); Object.keys(planLimits).map((planId) => ( const limitMap = new Map(Object.entries(planLimits[planId]));
const planLimits = {plan1: {condition1: 50, ...}}
function initialisePlanLimits(planLimits) {
const limits = new Map();
Object.keys(planLimits).map((planId) => (
const limitMap = new Map(Object.entries(planLimits[planId]));
limits.set(planId, limitMap);
));
return limits;
}
linter标记此错误:预期在此函数数组回调返回中返回值的错误
所以我改成了这个版本:
function initialisePlanLimits(planLimits) {
const limits = new Map();
Object.keys(planLimits).map((planId) => (
limits.set(planId, new Map(Object.entries(planLimits[planId])))
));
return limits;
}
它在单个函数参数周围抛出另一个错误意外的括号,该参数的主体没有花括号arrow parens
我的问题是:
1) 我想我可以通过在curry括号内插入一个returnnull
来修复我的第一个版本。但是有更好、更优雅的方式吗?在这种情况下,伪返回语句没有意义
2) 为什么第二个版本失败了?它不等于第一个版本吗 如果使用
forEach
而不是map
,则不会导致数组回调返回
lint错误
Object.keys(planLimits).forEach((planId) => (
const limitMap = new Map(Object.entries(planLimits[planId]));
limits.set(planId, limitMap);
));
TLDR:ESLint和函数返回值
此问题是由于在使用map()
时未返回值造成的,请参见根据文档预期的结果
map()方法创建一个新数组,其中填充了对调用数组中的每个元素调用所提供函数的结果。(来源:)
用JavaScript演示问题
这个JS代码示例显示了一组元素
var newarray = [];
array.map( (item, index) => {
newarray.push('<li>' + item + '</li>');
});
如果我向上述函数添加一个返回,错误就会消失,如下所示:
var newarray = array.map( (item, index) => {
return '<li>' + item + '</li>';
});
var newarray=array.map((项目,索引)=>{
返回“”+项目+” ”;
});
`map()`-那么我为什么要使用它呢?
在MDN文档的其他地方,您也可以清楚地看到,返回的是“一个新数组,每个元素都是回调函数[return value of the]的结果。”因此,如果您使用map()
,也可以使用return returnvalue
map()
是一个强大的工具。不要扔掉那个工具。好吧,公认的答案是提倡使用“forEach”,这是正确的。请阅读下面的解释
数组有几种用于过滤、映射和折叠的方法。如果我们忘记在这些函数的回调中编写return语句,那可能是个错误。如果您不想使用返回或不需要返回的结果,请考虑使用.Frach替代。
链接线程不支持此答案。它谈到Pascal,其中“函数”不同于“过程”。在JavaScript中,无论它们是否返回值,都称为“函数”。@Thomas你说得对!谢谢你指出这一点。我正在编辑这个答案,所以我省略了这一部分,并更正了Map()
mdnweblinks以正确地指向Map()
func,并进一步清理了我的示例。
var newarray = array.map( (item, index) => {
return '<li>' + item + '</li>';
});