为什么
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
答案 0 :(得分:2)
检查文档中是否有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());
(我想您也可以使用逗号运算符来避免使用{
/ }
块,但是仅出于打高尔夫的目的,这会损害代码的清晰度)