Javascript 按id分组并求和使用Lodash获取和以设置新值

Javascript 按id分组并求和使用Lodash获取和以设置新值,javascript,arrays,Javascript,Arrays,是否可以按(例如,“id”)进行排序和分组,并通过使用Lodash添加键的所有唯一值(例如:支付)来更新元素的值? 例如,可以在下面创建此阵列: [ { id: 1, payout: 15, numOfPeople: 4 }, { id: 1, payout: 12, numOfPeople: 3 }, { id: 2, payout: 6, numOfPeople: 5 },

是否可以按(例如,“id”)进行排序和分组,并通过使用Lodash添加键的所有唯一值(例如:支付)来更新元素的值?
例如,可以在下面创建此阵列:

[
  {
     id: 1,
     payout: 15,
     numOfPeople: 4
  },
  {
     id: 1,
     payout: 12,
     numOfPeople: 3
  },
  {
     id: 2,
     payout: 6,
     numOfPeople: 5
  },
  {
     id: 2,
     payout: 10,
     numOfPeople: 1
  }
]
。。。使用LODASH将其转换为如下所示:

  // Notice the Sum of all payout reflects the total sum of all
  // payout with id=1 or id=2 (for a specific id Group)

[
  {
     id: 1,
     payout: 27,
     numOfPeople: 4
  },
  {
     id: 1,
     payout: 27,
     numOfPeople: 3
  },
  {
     id: 2,
     payout: 16,
     numOfPeople: 5
  },
  {
     id: 2,
     payout: 16,
     numOfPeople: 1
   }
 ]

您可以结合使用
过滤器
映射
减少
来执行此操作

const arr = [
  {
    id: 1,
    payout: 15,
    numOfPeople: 4,
  },
  {
    id: 1,
    payout: 12,
    numOfPeople: 3,
  },
  {
    id: 2,
    payout: 6,
    numOfPeople: 5,
  },
  {
    id: 2,
    payout: 10,
    numOfPeople: 1,
  },
];

const idPayoutMap = {};

let result = arr.map(x => {
  if (idPayoutMap['' + x.id] !== undefined) {
    x.payout = idPayoutMap['' + x.id];
  } else {
    x.payout = arr
      .filter(y => y.id === x.id)
      .reduce((totalPayout, y) => y.payout + totalPayout, 0);
    idPayoutMap['' + x.id] = x.payout;
  }

  return x;
});


console.log(result);

下面是一个工作示例:

欢迎使用堆栈溢出!请拿着这本书,通读一遍,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运
thearray.map((f)=>{const n=Object.assign({},f);n.payout=a.filter((v)=>v.id==f.id)。reduce((a,v)=>a+v.payout,0);返回n;})
如果在求和之前我可以检查payout>0是否大于零