Ich habe diese Beispieldaten von einer API zurückgegeben.
Ich verwende Lodashs _.groupBy
, um die Daten in ein Objekt zu konvertieren, das ich besser verwenden kann. Die zurückgegebenen Rohdaten lauten wie folgt:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Ich möchte, dass die _.groupBy
Funktion ein Objekt zurückgibt, das so aussieht:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
Zur Zeit benutze ich
_.groupBy(a, function(b) { return b.color})
was dies zurückgibt.
{blue: [{..}], green: [{...}]}
Die Gruppierungen sind korrekt, aber ich möchte wirklich die gewünschten Schlüssel hinzufügen ( color
, users
). ist das möglich mit _.groupBy
? oder ein anderes LoDash
Dienstprogramm?
javascript
sorting
underscore.js
grouping
lodash
user1767105
quelle
quelle
_.object
ein Alias für ist_.zipObject
)._.zip
und_.pair
so viel.pairs()
Methode nicht mehr. Eine aktualisierte lodash 4.0-Version dieses Beispiels ist:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
wird derzeit als schlechte Praxis angesehen.Ist es nicht so einfach?
quelle
ein anderer Weg
quelle
Die Antwort mit der höchsten Bewertung
_.chain
verwendet die Lodash- Funktion, die derzeit als schlechte Praxis angesehen wird. "Warum ist die Verwendung ein Fehler ? "_.chain
Hier ist ein paar Zeilen, die sich dem Problem aus Sicht der funktionalen Programmierung nähern :
Wo
input
ist ein Array, das Sie konvertieren möchten?quelle
flow()
anstelle vonchain()
hier zu verwenden, aber die Typprüfung von Typoskript wird mit komponierten Funktionen einfach verrückt. Ich hoffe, wir haben die gleiche Unterstützung, die wir derzeit bei RxJS habenpipe()
, zum Beispiel bei lodash.map((users, color) => ({color, users}))
stattmap((value, key) => ({ color: key, users: value }))
Vielen Dank an @thefourtheye , Ihr Code hat sehr geholfen. Ich habe aus Ihrer Lösung eine generische Funktion mit der Version 4.5.0 von Lodash erstellt.
Um es zu benutzen:
Hier ist der aktualisierte Geiger;
https://jsfiddle.net/sc2L9dby/
quelle
Hier ist eine aktualisierte Version mit lodash 4 und ES6
quelle
Ich würde einen anderen Ansatz vorschlagen. Wenn Sie meine eigene Bibliothek verwenden, können Sie dies in wenigen Zeilen tun:
Dies wäre bei lodash oder Underscore etwas schwierig, da die Argumente in der entgegengesetzten Reihenfolge angeordnet sind und Sie daher
_.partial
viel verwenden müssten .quelle
Beispiel groupBy und Summe einer Spalte mit Lodash 4.17.4
quelle
Im Jahr 2017 tun Sie dies
quelle