I'm trying to filter this data by type of ferment, then for each ferment type, combine the unique values of the use and year as arrays. For the "made" I want to add all the values up by year.
ferments = [
{"ferment": "cabbage", "use": "sauerkraut", "year": "2018", "made": 2},
{"ferment": "cabbage", "use": "pickled", "year": "2018", "made": 1},
{"ferment": "cabbage", "use": "sauerkraut", "year": "2019", "made": 2},
{"ferment": "cabbage", "use": "pickled", "year": "2019", "made": 1},
{"ferment": "cabbage", "use": "pickled", "year": "2020", "made": 3},
{"ferment": "beets", "use": "pickled", "year": "2018", "made": 3},
{"ferment": "beets", "use": "fermented", "year": "2018", "made": 2},
{"ferment": "beets", "use": "pickled", "year": "2019", "made": 4},
{"ferment": "beets", "use": "fermented", "year": "2019", "made": 2},
{"ferment": "beets", "use": "pickled", "year": "2020", "made": 4},
{"ferment": "beets", "use": "fermented", "year": "2020", "made": 1}
]
I've tried many variations, and this is the closest I've gotten (without adding up the "made" values). This gives me an array of two objects, but I would like an object so that I can call it like so and get the relevant information for each key: ferments[cabbage]
const groupedByFerment = _(data)
.groupBy("ferment")
.map(d => ({
// ferment: d[0].ferment,
use: _(d).flatMap("use").uniq().value(),
salt: _(d).flatMap("made").uniq().value(),
year: _(d).flatMap("year").uniq().value(),
}))
.value()
Here's my desired output:
ferments = {
cabbage: {
use: [sauerkraut, pickled],
year: [2018, 2019, 2020],
made: [3, 3, 3],
},
beets: {
use: [fermented, pickled],
year: [2018, 2019, 2020],
made: [5, 6, 5],
}
}