si tengo un array
[{a:1}, {a:2}, {a:3}, {b:1}, {b:2}]
y quiero
{a:[1,2,3],b:[1,2]} // el cual es un Map
Haciendo uso de los nuevos métodos para arrays de ES6 lo tienes fácil y te olvidas de tanto bucle for. (Tener en cuenta que NodeJS ya acepta más del 90% de las características de ES6)
Voy a utilizar el método Array.reduce de la nueva especificación.
const obj = [{a:1}, {a:2}, {a:3}, {b:1}, {b:2}];
const objMapped = obj.reduce((array, item) => {
let arr = [];
for (let i of Object.keys(item))
{
if (!array[i])
array[i] = [];
array[i].push(item[i]);
return array;
}
}, []);
console.log(objMapped);
objMapped contiene el nuevo array
Te muestro el resultado en mi máquina:
$ node elhacker-net.js
[ a: [ 1, 2, 3 ], b: [ 1, 2 ] ]
-
Edito:
Hice otro ejemplo, un poco más acorde a ES6, olvidando Array.push de la línea 11
const obj = [{a:1}, {a:2}, {a:3}, {b:1}, {b:2}];
const objMapped = obj.reduce((array, item) => {
let arr = [];
for (let i of Object.keys(item))
{
if (!array[i])
array[i] = [];
array[i] = [...array[i], item[i]];
return array;
}
}, []);
console.log(objMapped);
Para aprender más, puedes encontrar información en
MDN acerca de ES6.