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>';
      });