Restructuring an array

I’m trying restructure an array and build another one. Tried to use filter, map, but couldn’t achieved that. There are some factors in array and it’s ratings (the 5 elements of object from the beginning). I should collect them in another array. I have an array like this.

[{
  "carryRating": 21,
  "distanceRating": 72,
  "obHavoYogingarchilikQorVaHKRating": 74,
  "obHavoQuruqRating": 40,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 32,
  "id": 1,
  "direction": "A",
  "distance": "90.55",
  "carry": "365",
  "obHavoQuruq": "50",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "56",
  "obHavoYogingarchilikQorVaHK": "58"
}, {
  "carryRating": 35,
  "distanceRating": 74,
  "obHavoYogingarchilikQorVaHKRating": 71,
  "obHavoQuruqRating": 29,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 55,
  "id": 2,
  "direction": "B",
  "distance": "82.46",
  "carry": "589",
  "obHavoQuruq": "36",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "98",
  "obHavoYogingarchilikQorVaHK": "65"
}, {
  "carryRating": 19,
  "distanceRating": 76,
  "obHavoYogingarchilikQorVaHKRating": 90,
  "obHavoQuruqRating": 17,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 11,
  "id": 3,
  "direction": "C",
  "distance": "76.16",
  "carry": "326",
  "obHavoQuruq": "21",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "20",
  "obHavoYogingarchilikQorVaHK": "23"
}, {
  "carryRating": 25,
  "distanceRating": 78,
  "obHavoYogingarchilikQorVaHKRating": 65,
  "obHavoQuruqRating": 14,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 2,
  "id": 4,
  "direction": "D",
  "distance": "72.11",
  "carry": "421",
  "obHavoQuruq": "17",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "3",
  "obHavoYogingarchilikQorVaHK": "78"
}]

I want to restructure it like this:

const newData = [
  {
    factor: "carry",
    firstElementOfArray: 21, // it's carryRating 
    secondElementOfArray: 35,
    thirdElementOfArray: 19,
    fourthElementOfArray: 25
  },
  {
    factor: "distance",
    firstElementOfArray: 72, // it's distanceRating
    secondElementOfArray: 74,
    thirdElementOfArray: 76,
    fourthElementOfArray: 78
  },
  {
    factor: "obHavoQuruq",
    firstElementOfArray: 40, // it's obHavoQuruqRating
    secondElementOfArray: 29,
    thirdElementOfArray: 17,
    fourthElementOfArray: 14
  },
  {
    factor: "yetkazibBeruvchiningMoliyaviyAhvoli",
    firstElementOfArray: 32, // it's yetkazibBeruvchiningMoliyaviyAhvoliRating
    secondElementOfArray: 55,
    thirdElementOfArray: 11,
    fourthElementOfArray: 2
  },
  {
    factor: "obHavoYogingarchilikQorVaHK",
    firstElementOfArray: 74, // it's obHavoYogingarchilikQorVaHKRating
    secondElementOfArray: 71,
    thirdElementOfArray: 90,
    fourthElementOfArray: 65
  },
]

How can I do that?

>Solution :

I’d solve it by mapping keys with properties, and iterating over them.
This solution does require you to have a fixed number of items in the input array, but it could be expanded with some kind of "translation" from [x] to ‘x-thElementOfArray’ if needed as well.

let input = [{
  "carryRating": 21,
  "distanceRating": 72,
  "obHavoYogingarchilikQorVaHKRating": 74,
  "obHavoQuruqRating": 40,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 32,
  "id": 1,
  "direction": "A",
  "distance": "90.55",
  "carry": "365",
  "obHavoQuruq": "50",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "56",
  "obHavoYogingarchilikQorVaHK": "58"
}, {
  "carryRating": 35,
  "distanceRating": 74,
  "obHavoYogingarchilikQorVaHKRating": 71,
  "obHavoQuruqRating": 29,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 55,
  "id": 2,
  "direction": "B",
  "distance": "82.46",
  "carry": "589",
  "obHavoQuruq": "36",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "98",
  "obHavoYogingarchilikQorVaHK": "65"
}, {
  "carryRating": 19,
  "distanceRating": 76,
  "obHavoYogingarchilikQorVaHKRating": 90,
  "obHavoQuruqRating": 17,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 11,
  "id": 3,
  "direction": "C",
  "distance": "76.16",
  "carry": "326",
  "obHavoQuruq": "21",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "20",
  "obHavoYogingarchilikQorVaHK": "23"
}, {
  "carryRating": 25,
  "distanceRating": 78,
  "obHavoYogingarchilikQorVaHKRating": 65,
  "obHavoQuruqRating": 14,
  "yetkazibBeruvchiningMoliyaviyAhvoliRating": 2,
  "id": 4,
  "direction": "D",
  "distance": "72.11",
  "carry": "421",
  "obHavoQuruq": "17",
  "yetkazibBeruvchiningMoliyaviyAhvoli": "3",
  "obHavoYogingarchilikQorVaHK": "78"
}];

let propertyMapping = {
  carry: "carryRating",
  distance: "distanceRating",
  obHavoQuruq: "obHavoQuruqRating",
  yetkazibBeruvchiningMoliyaviyAhvoli: "yetkazibBeruvchiningMoliyaviyAhvoliRating",
  obHavoYogingarchilikQorVaHK: "obHavoYogingarchilikQorVaHKRating"
};

let output = Object.keys(propertyMapping).map(key => ({
    factor: key,
  firstElementOfArray: input[0][propertyMapping[key]],
  secondElementOfArray: input[1][propertyMapping[key]],
  thirdElementOfArray: input[2][propertyMapping[key]],
  fourthElementOfArray: input[3][propertyMapping[key]]
}));

console.log(output);

Leave a Reply