Estoy aprendiendo Javascript y tengo un hash de usuarios como este:
const users = [{id: 1, firstName: "Jose", revenue: 3700, country: "Colombia"}, {id: 2, firstName: "Rodney", revenue: 9100, country: "Germany"}, {id: 3, firstName: "Danny", revenue: 0, country: "United States"}, { id: 4, firstName: "Birgit", revenue: 7700, country: "Germany"}, {id: 5, firstName: "Audra", revenue: 0, country: "Germany"},{id: 6, firstName: "Doreatha", revenue: 0, country: "Colombia"}]y me gustaría obtener las frecuencias de una clave (país) así como la suma de otra clave (ingresos) de los dos países más frecuentes. Intenté .reduce para obtener los países, pero el problema es que devuelve un objeto sin ingresos. Aquí está mi código:
const usersByCountry = users.reduce((c, u) => { c[u.country] = c[u.country] + 1 || 1; return c; }, {});Y aquí está la salida:
Object { "Colombia": 2, "Germany": 3, "United States": 1 }¿Es posible explotar .reduce para esto o estoy en el camino equivocado?
Puede agregar todas las propiedades requeridas al objeto acumulador en reduce :
const users = [{id: 1, firstName: "Jose", revenue: 3700, country: "Colombia"}, {id: 2, firstName: "Rodney", revenue: 9100, country: "Germany"}, {id: 3, firstName: "Danny", revenue: 0, country: "United States"}, { id: 4, firstName: "Birgit", revenue: 7700, country: "Germany"}, {id: 5, firstName: "Audra", revenue: 0, country: "Germany"},{id: 6, firstName: "Doreatha", revenue: 0, country: "Colombia"}] const usersByCountry = users.reduce((acc, u) => { acc[u.country] = { frequency: (acc[u.country]?.frequency ?? 0) + 1, revenue: (acc[u.country]?.revenue ?? 0) + u.revenue }; return acc; }, {}); console.log(usersByCountry);