Tengo estos datos de muestra devueltos desde una API.
Estoy usando Lodash's _.groupBypara convertir los datos en un objeto que puedo usar mejor. Los datos brutos devueltos son los siguientes:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Quiero que la _.groupByfunción devuelva un objeto que se parece a esto:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
Actualmente estoy usando
_.groupBy(a, function(b) { return b.color})
que está devolviendo esto.
{blue: [{..}], green: [{...}]}
las agrupaciones son correctas, pero realmente me gustaría agregar las claves que quiero ( color, users). ¿Es esto posible el uso _.groupBy? o alguna otra LoDashutilidad?
javascript
sorting
underscore.js
grouping
lodash
usuario1767105
fuente
fuente

_.objectes un alias de_.zipObject)?_.zipy_.pairtanto todavía.pairs()método ya no existe. Una versión actualizada de lodash 4.0 de este ejemplo es:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();_.chainse considera ahora una mala práctica.¿No es así de simple?
fuente
de otra manera
fuente
La respuesta más votada usa la función Lodash
_.chain, que ahora se considera una mala práctica "Por qué usar_.chaines un error".Aquí hay algunos lineamientos que abordan el problema desde la perspectiva de la programación funcional :
¿Dónde
inputhay una matriz que desea convertir?fuente
flow()lugar dechain()aquí, pero la verificación de tipo de mecanografiado simplemente se vuelve loca con las funciones compuestas. Espero que tengamos el mismo nivel de soporte que tenemos actualmente en RxJSpipe(), por ejemplo, en lodash.map((users, color) => ({color, users}))lugar demap((value, key) => ({ color: key, users: value }))Gracias @thefourtheye , su código ayudó mucho. Creé una función genérica a partir de su solución usando la versión 4.5.0 de Lodash.
Para usarlo:
Aquí está el violinista actualizado;
https://jsfiddle.net/sc2L9dby/
fuente
Aquí hay una versión actualizada usando lodash 4 y ES6
fuente
Sugeriría un enfoque diferente, usando mi propia biblioteca , podría hacer esto en unas pocas líneas:
Esto sería un poco difícil con lodash o subrayado porque los argumentos están en el orden opuesto, por lo que tendrías que usar
_.partialmucho.fuente
Ejemplo groupBy y suma de una columna usando Lodash 4.17.4
fuente
En 2017 hazlo
fuente