我正在尝试将对象数组减少为一组唯一值。为此,我试图使用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”


我正在尝试做的事可能吗?我需要其他方式吗?

最佳答案

如果if条件失败,则需要返回accumulator。否则默认情况下,它返回undefined(隐式)。



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

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

  console.log([...op])

关于javascript - 我的 reducer 可以使用Set作为初始值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54186493/

10-10 00:07