Eu tenho esses dados de amostra retornados de uma API.
Estou usando o Lodash _.groupBy
para converter os dados em um objeto que posso usar melhor. Os dados brutos retornados são estes:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Quero que a _.groupBy
função retorne um objeto parecido com este:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
Atualmente estou usando
_.groupBy(a, function(b) { return b.color})
que está retornando isso.
{blue: [{..}], green: [{...}]}
os agrupamentos estão corretos, mas eu realmente gostaria de adicionar as chaves que desejo ( color
, users
). isso é possível usando _.groupBy
? ou algum outro LoDash
utilitário?
javascript
sorting
underscore.js
grouping
lodash
user1767105
fonte
fonte
_.object
é um apelido para_.zipObject
)._.zip
e_.pair
muito ainda.pairs()
método não existe mais. Uma versão lodash 4.0 atualizada deste exemplo é:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
é considerado uma prática ruim agora.Não é tão simples?
fonte
outra maneira
fonte
A resposta mais votada usa a função Lodash
_.chain
, que é considerada uma prática ruim agora "Por que usar_.chain
é um erro."Aqui estão algumas linhas que abordam o problema da perspectiva da programação funcional :
Onde
input
está uma matriz que você deseja converter.fonte
flow()
vez dechain()
aqui, mas a verificação de tipo do texto digitado simplesmente enlouquece com funções compostas. Espero que tenhamos o mesmo nível de suporte que temos atualmente em RxJSpipe()
, por exemplo, em lodash.map((users, color) => ({color, users}))
vez demap((value, key) => ({ color: key, users: value }))
Obrigado @thefourtheye , seu código ajudou muito. Criei uma função genérica da sua solução usando a versão 4.5.0 do Lodash.
Para usá-lo:
Aqui está o violinista atualizado;
https://jsfiddle.net/sc2L9dby/
fonte
Aqui está uma versão atualizada usando lodash 4 e ES6
fonte
Eu sugeriria uma abordagem diferente, usando minha própria biblioteca, você poderia fazer isso em algumas linhas:
Isso seria um pouco difícil com lodash ou sublinhado porque os argumentos estão na ordem oposta, então você teria que usar
_.partial
muito.fonte
Exemplo groupBy e soma de uma coluna usando Lodash 4.17.4
fonte
Em 2017 faça isso
fonte