Предупреждение Неожиданное имя-функции в соответствии с правилом ESLint - PullRequest
0 голосов
/ 10 октября 2018

Моя eslint версия 4.18.2, она выдаст следующее предупреждение:

Неожиданная безымянная функция
Ожидается присваивание или вызов функции, и вместо этого она видит выражение

При определении функций таким образом:

 const farmerIds = a.reduce((function (hash) {
  return function (prev, curr) {
    !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
    return prev;
  };
}(Object.create(null))), []);

1 Ответ

0 голосов
/ 10 октября 2018

Это две разные проблемы ...

Неожиданная безымянная функция

Это, как указал Константин, правило ESLint func-names .

Если вы не хотите отключать это правило, вы можете использовать имена для своих функций, например:

const farmerIds = a.reduce((function reducer(hash) {
  return function fn(prev, curr) {
    !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
    return prev;
  };
}(Object.create(null))), []);

Или, и это я бы рекомендовал лично, используйтефункции стрелок:

const farmerIds = a.reduce(
  (hash => {
    return (prev, curr) => {
      !hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));
      return prev;
    };
  })(Object.create(null)),
  []
);

Ожидается присваивание или вызов функции, и вместо этого он видит выражение

ESLint жалуется на эту строку, которая действительно является выражением, а не выражениемназначение или вызов функции:

!hash[curr.farmerId] && (hash[curr.farmerId] = prev.push(curr));

Вы можете переписать его как оператор if:

if (!hash[curr.farmerId]) {
  hash[curr.farmerId] = prev.push(curr);
}

Исправление обоих

УстановкаПриведенные выше примеры кода вместе, этот код должен выполняться без жалоб ESLint:

const farmerIds = a.reduce(
  (hash => (prev, curr) => {
    if (!hash[curr.farmerId]) {
      hash[curr.farmerId] = prev.push(curr);
    }
    return prev;
  })(Object.create(null)),
  []
);

Обратите внимание, что я также удалил фигурные скобки вокруг тела функции первой стрелки, что является хорошей дополнительной функцией длясохранить код более кратким.

...