Почему
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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проверьте документы для Set.prototype.delete:
Return value
trueif an element in the Set object has been removed successfully; otherwisefalse
Он не возвращает Set. Итак, если вы хотите использовать reduce и delete таким образом, вам придется использовать два разных оператора, а не только один связанный:
screens.reduce((acc,s) => {
acc
.add(s._created_by)
.add(s._last_modified_by)
.delete("admin");
return acc;
} , new Set());
(Я полагаю, вы также можете использовать оператор запятой, чтобы избежать использования блоков { / }, но только ради игры в гольф это повредит ясности кода)
OMG - JS все еще есть способ вести себя как функциональный язык - спасибо !!!!