si tengo una matriz js como la siguiente, ¿hay una forma sencilla de reagrupar los valores de la matriz por edad? Traté de reducirlo a una matriz, pero no ayudó. se reagrupa con la edad o el nombre
let employees = [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020", }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019", }, { firstName: "Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011", }, ];Para reagrupar por edad así:
let organizedByAge = { 25: [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020", }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019", }, ], 30: [ { firstName:"Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011", }, ], };¿Existe una forma sencilla de reagrupar los valores de la matriz por edad?
Al reescribir arreglos y objetos, el enfoque más sencillo y legible suele ser usar un bucle for simple:
for (let i = 0; i < employees.length; i++) { const age = employees[i]['age']; if (organizedByAge.hasOwnProperty(age)) { organizedByAge[age].push(employees[i]); } else { organizedByAge[age] = []; organizedByAge[age][0] = employees[i]; } }Ejemplo de trabajo:
let employees = [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020", }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019", }, { firstName: "Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011", }, ]; let organizedByAge = {}; for (let i = 0; i < employees.length; i++) { const age = employees[i]['age']; if (organizedByAge.hasOwnProperty(age)) { organizedByAge[age].push(employees[i]); } else { organizedByAge[age] = []; organizedByAge[age][0] = employees[i]; } } console.log(organizedByAge);Usando Array#reduce :
const employees = [ { firstName:"Zion", lastName: "Rosy", age: 25, joinedDate:"January 24, 2020" }, { firstName: "Ana", lastName: "Rosy", age: 25, joinedDate: "January 15, 2019" }, { firstName: "Zion", lastName:"Albert", age: 30, joinedDate:"February 15, 2011" } ]; const organizedByAge = employees.reduce((map, e) => ({ ...map, [e.age]: [...(map[e.age] ?? []), e] }), {}); console.log(organizedByAge);const groupByKey = (_data, _key) => { return _data.reduce((result, next) => { const key = next[_key]; result[key] = result[key]?.length ? [...result[key], next] : [next]; return result; }, {}); } console.warn(groupByKey(employees, 'age'));