Mam te przykładowe dane zwrócone z interfejsu API.
Używam Lodash _.groupBy
do konwersji danych na obiekt, którego mogę używać lepiej. Zwrócone nieprzetworzone dane są następujące:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Chcę, aby _.groupBy
funkcja zwracała obiekt, który wygląda następująco:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
Obecnie używam
_.groupBy(a, function(b) { return b.color})
który to zwraca.
{blue: [{..}], green: [{...}]}
grupowania są poprawne, ale naprawdę chciałbym dodać klucze, które chcę ( color
, users
). czy jest to możliwe przy użyciu _.groupBy
? lub jakieś inne LoDash
narzędzie?
javascript
sorting
underscore.js
grouping
lodash
user1767105
źródło
źródło
_.object
jest aliasem_.zipObject
)._.zip
i_.pair
jeszcze tak dużo.pairs()
metoda już nie istnieje. Zaktualizowana wersja tego przykładu lodash 4.0 to:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
jest obecnie uważane za złą praktykę.Czy to nie jest takie proste?
źródło
Inny sposób
źródło
Najwyższa głosowana odpowiedź wykorzystuje funkcję Lodash,
_.chain
która jest obecnie uważana za złą praktykę „Dlaczego używanie_.chain
jest błędem”.Oto kilka zdań, które podchodzą do problemu z perspektywy programowania funkcjonalnego :
Gdzie
input
jest tablica, którą chcesz przekonwertować.źródło
flow()
zamiastchain()
tutaj, ale sprawdzanie typu maszynopisu po prostu szaleje ze złożonymi funkcjami. Mam nadzieję, że mamy taki sam poziom wsparcia, jaki mamy obecnie w RxJSpipe()
, na przykład w lodash.map((users, color) => ({color, users}))
zamiastmap((value, key) => ({ color: key, users: value }))
Dzięki @thefourtheye , Twój kod bardzo pomógł. Utworzyłem ogólną funkcję z Twojego rozwiązania przy użyciu wersji 4.5.0 Lodash.
Aby z niego skorzystać:
Oto zaktualizowany skrzypek;
https://jsfiddle.net/sc2L9dby/
źródło
Oto zaktualizowana wersja wykorzystująca lodash 4 i ES6
źródło
Sugerowałbym inne podejście, korzystając z mojej własnej biblioteki, możesz to zrobić w kilku wierszach:
Byłoby to trochę trudne w przypadku lodash lub podkreślenia, ponieważ argumenty są w odwrotnej kolejności, więc musiałbyś dużo używać
_.partial
.źródło
Przykład groupBy i suma kolumny przy użyciu Lodash 4.17.4
źródło
Zrób to w 2017 roku
źródło