我的减速机可以使用Set作为初始值吗?

时间:2019-01-14 17:33:35

标签: javascript typescript reduce

我正在尝试将对象数组简化为一组唯一值。为此,我正在尝试使用Set作为reduce()操作的累加器。

subscriptions = [
    {list_id: 'abc', name: 'nom', subscribed: true},
    {list_id: 'abc', name: 'nom', subscribed: true},
    {list_id: 'ghi', name: 'nom', subscribed: false}];

return subscriptions.reduce((accumulator, currentValue) => {
    if (currentValue.subscribed) {
      return accumulator.add(currentValue.list_id);
    }
  }, new Set());

我的测试报告以下错误:

  

TypeError:无法读取未定义的属性“ add”

我试图做的是可能的吗?我需要以其他方式执行此操作吗?

2 个答案:

答案 0 :(得分:5)

如果if条件失败,则需要返回dev_appserver.py --smtp_host=smtp.gmail.com --smtp_port=25 --smtp_user=xxx@gmail.com --smtp_password=yyy myapp 。否则默认情况下,它将返回accumulator(隐式)。

undefined

答案 1 :(得分:1)

您可以先过滤并映射list_id并采用Set的构造函数,而不是减少数组。

var subscriptions = [{ list_id: 'abc', name: 'nom', subscribed: true }, { list_id: 'abc', name: 'nom', subscribed: true }, { list_id: 'ghi', name: 'nom', subscribed: false }],
    uniqueIds = new Set(subscriptions
        .filter(({ subscribed }) => subscribed)
        .map(({ list_id }) => list_id)
    );

console.log([...uniqueIds]);