Javascript typescript-用sum映射数组

Javascript typescript-用sum映射数组,javascript,typescript,Javascript,Typescript,我让这个函数返回一个像照片中那样的对象 this.events$ = this.disponibilityService.getDisponibilitiesByTeacher('a1') .pipe( map((result: any) => { let teachers = result.map((item: any) => { return { startHour: item.startHour, endHour: item.endHour, ye

我让这个函数返回一个像照片中那样的对象

this.events$ = this.disponibilityService.getDisponibilitiesByTeacher('a1')
.pipe(
   map((result: any) => {
     let teachers = result.map((item: any) => {
       return { startHour: item.startHour, endHour: item.endHour, year: item.startDate.split('-')[0] };
     });
     console.log(teachers);
  })
);

如何映射返回如下数组的结果

nbr:重复的年数

nbrHour:每年小时数的总和(小时数=结束小时-开始小时)


您可以按年份对数据进行分组,然后
map
分组,对于每个组,
nbr
将是组大小,
nbrhoor
将通过该组中所有元素的
endHour-startHour
之和进行累积

const数据=[
{起点:800,终点:1200,年份:“2020”},
{星空:1400,结束时间:1800,年份:“2021”},
{起点:800,终点:1030,年份:“2020”},
];
const groupByYear=Object.entries(
数据减少((acc,el)=>{
如果(!根据【el.年】){
会计年度=[el];
}否则{
acc【el.年】。推送(el);
}
返回acc;
}, {})
);
const res=groupByYear.map([year,data])=>({
nbr:数据长度,
小时:data.reduce(
(acc,{startHour,endHour})=>acc+endHour-startHour,
0
),
年
}));
控制台日志(res)

。作为控制台包装器{max height:100%!important;}
您为什么希望年份成为字符串?我不明白重复的
年数是什么意思?@Cyclonecode 2020年重复了两次,所以nbr=2
[
  {nbr: 2, nbrHour: 630, year: 2020},
  {nbr: 1, nbrHour: 400, year: 2021}
]