链接JS Set方法会导致TypeError

时间:2018-11-22 08:16:52

标签: javascript set

为什么

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 :(得分:2)

检查文档中是否有Set.prototype.delete

  

返回值

     

true,如果已成功删除Set对象中的元素;否则false

它不返回Set。因此,如果您要像这样使用reducedelete,则必须使用两个不同的语句,而不仅仅是一个链接的语句:

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

(我想您也可以使用逗号运算符来避免使用{ / }块,但是仅出于打高尔夫的目的,这会损害代码的清晰度)