Creating object

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

Thank you very much!

No worries :slight_smile:

1 Like

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.