You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JavaScript中reduce分组结果转为Map<number, Array<ImputacionData>>

解决将分组后的对象转换为Map类型的问题

嘿,Jose!我看到你已经用reduce把ImputacionData数组按empleadoId分组好了,现在想转成Map<number, Array<ImputacionData>>对吧?这有两种简单的方法可以实现:

方法一:从现有分组对象转换为Map

你已经通过reduce得到了一个以empleadoId为键的对象,只需要把这个对象的键值对转换为Map的格式即可。注意对象的键默认是字符串类型,所以需要把它转成数字:

// 基于你已有的imputacionesAndAusencias对象
const imputacionesMap = new Map<number, Array<ImputacionData>>(
  Object.entries(this.imputacionesAndAusencias).map(([key, value]) => [parseInt(key, 10), value])
);

解释:

  • Object.entries()会把你的分组对象转换成[键字符串, 值数组]的二维数组
  • 我们用map()把每个键字符串转成数字类型,最后传入Map的构造函数,就得到了你想要的类型

方法二:直接用reduce构建Map(更高效)

如果不想先创建中间对象,也可以在reduce的时候直接生成Map,一步到位:

this.imputacionesAndAusencias = this.imputacionesDatas.reduce((map, item) => {
  const empleadoId = item.empleadoId;
  // 如果Map里还没有这个empleadoId的键,就初始化一个空数组
  if (!map.has(empleadoId)) {
    map.set(empleadoId, []);
  }
  // 把当前item添加到对应的数组里
  map.get(empleadoId)!.push(item);
  return map;
}, new Map<number, Array<ImputacionData>>());

解释:

  • 初始值直接传一个空的Map<number, Array<ImputacionData>>
  • 每次迭代检查Map中是否存在当前empleadoId,不存在就创建新条目,存在就直接追加数据
  • 这种方式不需要额外的转换步骤,性能更优

在页面中渲染Map数据(以Angular为例)

如果是在Angular模板里渲染,可以用keyvalue管道把Map转换成可遍历的键值对数组:

<div *ngFor="let entry of imputacionesAndAusencias | keyvalue">
  <h4>Empleado ID: {{ entry.key }}</h4>
  <div *ngFor="let imputacion of entry.value">
    <!-- 渲染每个ImputacionData的属性,比如: -->
    <p>Fecha: {{ imputacion.fecha }} | Horas: {{ imputacion.horas }}</p>
  </div>
</div>

这样就能轻松遍历每个员工的所有ImputacionData数据啦!

内容的提问来源于stack exchange,提问作者Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:19