Estoy buscando una manera de analizar una matriz de objetos, con una clave de objeto común en una nueva matriz con un objeto con la clave común y una matriz de objetos comunes. la matriz se ve así:
[ { "name":"Elon", "city":"Berlin", "salary":5000, "age":25 }, { "name":"John", "city":"Amsterdam", "salary":8700, "age":28 },{ "name":"Jacob", "city":"Berlin", "salary":6500, "age":28 },{ "name":"Lilly", "city":"Amsterdam", "salary":10000, "age":23 },{ "name":"Mika", "city":"Kiev", "salary":6800, "age":25 } ]Quiero analizar que la matriz se verá así:
[ { "city":"Amsterdam", "ppl":[ { "name":"John", "salary":8700, "age":28 },{ "name":"Lilly", "salary":10000, "age":23 }] },{ "city":"Berlin", "ppl":[{ "name":"Elon", "salary":5000, "age":25 },{ "name":"Jacob", "salary":6500, "age":28 }] },{"city":"Kiev", "ppl":[{ "name":"Mika", "city":"Kiev", "salary":6800, "age":25 }]}Intenté usar reduce o forEach pero se arruinó. ¿Alguna idea o guía?
Puede usar Array#reduce con un objeto para almacenar las personas en cada ciudad.
const arr=[{"name":"Elon","city":"Berlin","salary":5000,"age":25},{"name":"John","city":"Amsterdam","salary":8700,"age":28},{"name":"Jacob","city":"Berlin","salary":6500,"age":28},{"name":"Lilly","city":"Amsterdam","salary":10000,"age":23},{"name":"Mika","city":"Kiev","salary":6800,"age":25}]; let res = Object.values(arr.reduce((acc, {city, ...rest})=> ((acc[city] ??= {city, ppl: []}).ppl.push(rest), acc), {})); console.log(res);