Создание цепочки методов JS Set приводит к TypeError - PullRequest
0 голосов
/ 22 ноября 2018

Почему

screens.reduce((acc,s) =>
    acc.add(s._created_by).add(s._last_modified_by), new Set());

работает должным образом (набор получает две вещи, добавленные на каждой итерации), тогда как добавление .delete("admin"), как в

screens.reduce((acc,s) =>
    acc.add(s._created_by).add(s._last_modified_by).delete("admin"), new Set());

, приводит к TypeError: acc.add is not a function

1 Ответ

0 голосов
/ 22 ноября 2018

Проверьте документы для Set.prototype.delete :

Возвращаемое значение

true, если элемент в объекте Set был успешно удален;в противном случае false

Не возвращает Set.Так что, если вы хотите использовать reduce и delete таким образом, вам придется использовать два разных утверждения, а не только одно цепочечное:

screens.reduce((acc,s) => {
  acc
    .add(s._created_by)
    .add(s._last_modified_by)
    .delete("admin");
  return acc;
} , new Set());

(я полагаю, вы также можете использоватьоператор запятой, чтобы избежать необходимости использовать блоки { / }, но только ради игры в гольф, это нарушило бы ясность кода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...