J'ai ces exemples de données renvoyés par une API.
J'utilise Lodash _.groupBy
pour convertir les données en un objet que je peux mieux utiliser. Les données brutes renvoyées sont les suivantes:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Je veux que la _.groupBy
fonction renvoie un objet qui ressemble à ceci:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
J'utilise actuellement
_.groupBy(a, function(b) { return b.color})
qui renvoie ceci.
{blue: [{..}], green: [{...}]}
les regroupements sont corrects, mais j'aimerais vraiment ajouter les touches que je veux ( color
, users
). est-ce possible en utilisant _.groupBy
? ou un autre LoDash
utilitaire?
javascript
sorting
underscore.js
grouping
lodash
user1767105
la source
la source
_.object
c'est un alias pour_.zipObject
)._.zip
et_.pair
tellement encore.pairs()
méthode n'existe plus. Une version lodash 4.0 mise à jour de cet exemple est:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
est considérée comme une mauvaise pratique maintenant.N'est-ce pas aussi simple?
la source
autrement
la source
La réponse la plus élevée utilise la fonction Lodash
_.chain
qui est considérée comme une mauvaise pratique maintenant "Pourquoi utiliser_.chain
est une erreur."Voici quelques lignes qui abordent le problème du point de vue de la programmation fonctionnelle :
Où se
input
trouve un tableau que vous souhaitez convertir.la source
flow()
au lieu d'chain()
ici, mais la vérification de type dactylographiée devient tout simplement folle avec les fonctions composées. J'espère que nous avons le même niveau de soutien que nous avons actuellement dans RxJSpipe()
, par exemple, dans lodash.map((users, color) => ({color, users}))
au lieu demap((value, key) => ({ color: key, users: value }))
Merci @thefourtheye , votre code a beaucoup aidé. J'ai créé une fonction générique à partir de votre solution en utilisant la version 4.5.0 de Lodash.
Pour l'utiliser:
Voici le violoniste mis à jour;
https://jsfiddle.net/sc2L9dby/
la source
Voici une version mise à jour utilisant lodash 4 et ES6
la source
Je suggérerais une approche différente, en utilisant ma propre bibliothèque, vous pouvez le faire en quelques lignes:
Ce serait un peu difficile avec lodash ou Underscore car les arguments sont dans l'ordre inverse, vous devrez donc en utiliser
_.partial
beaucoup.la source
Exemple groupBy et somme d'une colonne utilisant Lodash 4.17.4
la source
En 2017, faites-le
la source