Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

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?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>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);
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading