Hello,
I want to use this array of objects:
[
{ car: "bmw", model: "e46", price: "1000" },
{ car: "bmw", model: "e52", price: "2000" },
{ car: "bmw", model: "X5", price: "4000" },
{ car: "bmw", model: "e46", price: "1000" },
{ car: "audi", model: "A3", price: "1500"},
{ car: "audi", model: "A4", price: "2500"},
{ car: "audi", model: "TT", price: "2800"},
{ car: "audi", model: "A8", price: "3500"}
]
and transform it to this:
let cars = {
bmw: {
e46: "1000",
e52: "2000",
X5: "4000"
},
audi: {
A3: "1500",
A4: "2500",
TT: "2800",
A8: "3500"
}
}
How can I achieve this?
Hi,
You can do it using Array’s native reduce function:
const cars = carsArr.reduce((res, cur) => {
if(!(cur.car in res)) res[cur.car] = {};
res[cur.car][cur.model] = cur.price
return res;
}, {});
console.log(cars);
Gives you:
{
bmw: {e46: "1000", e52: "2000", X5: "4000"}
audi: {A3: "1500", A4: "2500", TT: "2800", A8: "3500"}
}
2 Likes
Slightly more readable form:
const carsArr = [
{ make: "bmw", model: "e46", price: "1000" },
{ make: "bmw", model: "e52", price: "2000" },
{ make: "bmw", model: "X5", price: "4000" },
{ make: "bmw", model: "e46", price: "1000" },
{ make: "audi", model: "A3", price: "1500"},
{ make: "audi", model: "A4", price: "2500"},
{ make: "audi", model: "TT", price: "2800"},
{ make: "audi", model: "A8", price: "3500"}
];
const carsReducer = (carsObject, car) => {
if (!(car.make in carsObject)) {
carsObject[car.make] = {};
}
carsObject[car.make][car.model] = car.price;
return carsObject;
};
const cars = carsArr.reduce(carsReducer, {});
console.log(cars);
2 Likes
system
Closed
6
This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.