Tengo estos datos de muestra devueltos desde una API.
Estoy usando Lodash's _.groupBy
para 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 _.groupBy
funció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 LoDash
utilidad?
javascript
sorting
underscore.js
grouping
lodash
usuario1767105
fuente
fuente
_.object
es un alias de_.zipObject
)?_.zip
y_.pair
tanto 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();
_.chain
se 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_.chain
es un error".Aquí hay algunos lineamientos que abordan el problema desde la perspectiva de la programación funcional :
¿Dónde
input
hay 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
_.partial
mucho.fuente
Ejemplo groupBy y suma de una columna usando Lodash 4.17.4
fuente
En 2017 hazlo
fuente