Reputation: 1819
I have a result of "ImputacionData", and with a reduces it I group it with an attribute of the object:
this.imputacionesDatas = data;
this.imputacionesAndAusencias = this.imputacionesDatas.reduce(function (r, a) {
r[a.empleadoId] = r[a.empleadoId] || [];
r[a.empleadoId].push(a);
return r;
}, Object.create(null));
The problem that I do not know how to work with the result, would need to put it in a Map to be able to work with that data on the screen and be able to paint them.
I do not know how to put the result of the "reduce" in something like:
Map <number, Array <ImputacionData >>;
Upvotes: 4
Views: 17802
Reputation: 386634
You could take Object.entries
for getting keys and values in an array.
this.imputacionesAndAusencias = Object.entries(this.imputacionesDatas.reduce(function (r, a) {
r[a.empleadoId] = r[a.empleadoId] || [];
r[a.empleadoId].push(a);
return r;
}, Object.create(null)));
If you like to get a Map
, you could take the map as return value.
this.imputacionesAndAusencias = this.imputacionesDatas.reduce(function (map, object) {
if (!map.has(object.empleadoId)) {
return map.set(object.empleadoId, [object]);
}
map.get(object.empleadoId).push(object);
return map;
}, new Map);
Upvotes: 8
Reputation: 370789
You can set the accumulator's initial value to new Map()
and then use the Map methods to set its values.
const input = [{
empleadoId: 5
}, {
empleadoId: 5
}, {
empleadoId: 6
}];
const output = input.reduce((map, item) => {
const { empleadoId } = item;
if (map.has(empleadoId)) map.get(empleadoId).push(item);
else map.set(empleadoId, [item]);
return map;
}, new Map());
console.log(...output);
Upvotes: 0