Tengo una matriz de objetos que se ve así
arr = [{ group: "Forest", value: "81.8", year: 2015 }, { group: "Forest", value: "86.4", year: 2016 }, { group: "Forest", value: "67.3", year: 2017 }, { group: "Forest", value: "70.8", year: 2018 }, { group: "Forest", value: "67.6", year: 2019 }, { group: "Mountain", value: "78.6", year: 2015 }, { group: "Mountain", value: "83.1", year: 2016 }, { group: "Mountain", value: "65.6", year: 2017 }, { group: "Mountain", value: "68.1", year: 2018 }, { group: "Mountain", value: "63.7", year: 2019 }];¿Hay alguna manera de agrupar esta matriz por grupo? Quiero crear algo como esto o similar:
arr = [{ group: "Forest", val2015: 81.8, val2016: 86.4, val2017: 67.3, val2018: 70.8, val2019: 67.6 },{ group: "Mountain", val2015: 78.6, val2016: 83.1, val2017: 65.6, val2018: 68.1, val2019: 63.7 }];¿Es posible hacer eso con js, o tal vez puedo enviar arr a ajax y hacer esto con php y luego devolverlo?
Puede crear un Map para codificar los grupos por las cadenas de grupos y asociar a esas claves objetos simples, cada uno con la propiedad del grupo.
Luego itere los datos para llenar esos objetos por combinaciones de año/valor.
Finalmente extrae esos objetos del Mapa:
const arr = [{group: "Forest",value: "81.8",year: 2015}, {group: "Forest",value: "86.4",year: 2016}, {group: "Forest",value: "67.3",year: 2017}, {group: "Forest",value: "70.8",year: 2018}, {group: "Forest",value: "67.6",year: 2019}, {group: "Mountain",value: "78.6",year: 2015}, {group: "Mountain",value: "83.1",year: 2016}, {group: "Mountain",value: "65.6",year: 2017}, {group: "Mountain",value: "68.1",year: 2018}, {group: "Mountain",value: "63.7",year: 2019}]; const groups = new Map(arr.map(({group}) => [group, { group }])); for (const {group, value, year} of arr) { groups.get(group)["val" + year] = +value; } const result = [...groups.values()]; console.log(result);