for example, from this:
const items = [
{
"id": 3,
"orgId": 2,
"mod": "toyota",
"part": "wheel",
"price": 333
},
{
"id": 4,
"orgId": 2,
"mod": "toyota",
"part": "shell",
"price": 350
},
{
"id": 9,
"orgId": 2,
"mod": "honda",
"part": "wheel",
"price": 222
},
{
"id": 10,
"orgId": 2,
"mod": "honda",
"part": "shell",
"price": 250
}
]
and convert to:
items = {
"toyota": {"wheel": 333, "shell": 350 },
"honda": {"wheel": 222, "shell": 250 }
}
What is the most elegant way?
I was trying to use .map()
but I'm not sure how to complete the nested struture.
Follow up:
Using this method:
const structure = {};
prices.forEach((e) => {
structure[e.mod] ??= {};
structure[e.mod][e.part] = e.price;
});
or:
result = items.reduce((r, o) => {
r[o.mod] ??= {};
r[o.mod][o.part] = o.price;
return r;
},{});
I got the following error:
Module parse failed: Unexpected token (56:31)
File was processed with these loaders:
* ./node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js
* ./node_modules/react-scripts/node_modules/babel-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
| const structure = {};
| prices.forEach(e => {
> structure[e.mod] ??= {};
| structure[e.mod][e.part] = e.price;
| });
I have done quite a lot searching but cannot find how to solve it.
Any advices?