I am inexperienced with lodash, but I believe it can help me transform data into a desired format. I have tried varying level of methods described in the documentation, but I can not wrap my head around everything. I’ve looked here on SO, a few blogs, and the documentation. I have tried combining groupby and map, but I was unable to resolve the issue. I was also unsure how to log the steps.
Given an array of objects like this:
[ { "parent": "app", "value": "id" "label": "1", }, { "parent": "app", "value": "title" "label": "Page", }, { "parent": "app", "value": "description" "label": "Desc page", }, { "parent": "home", "value": "id" "label": "2", }, { "parent": "home", "value": "title" "label": "Home", }, { "parent": "home", "value": "description" "label": "Desc home", } ]
I would like to convert it to this:
{ "app": { "id": "1", "title": "Page", "description": "Desc page" }, "home": { "id": "2", "title": "Home", "description": "Desc home" } }
Can anyone point me in the right direction?
Advertisement
Answer
You don’t need lodash to accomplish such behavior. You can easily do this with a reduce.
const values = [ { "parent": "app", "value": "id", "label": "1", }, { "parent": "app", "value": "title", "label": "Page", }, { "parent": "app", "value": "description", "label": "Desc page", }, { "parent": "home", "value": "id", "label": "2", }, { "parent": "home", "value": "title", "label": "Home", }, { "parent": "home", "value": "description", "label": "Desc home", } ]; const mappedValues = values.reduce((acc, val) => { acc[val.parent] = acc[val.parent] || {}; acc[val.parent][val.value] = val.label; return acc; }, {}); console.log(mappedValues);