how to convert a items in a object to list of array

{
    Type: "Fire",
    Name: "Shark",
    StartRange0: "10",
    EndRange0: "20",
    StartRange1: "30",
    EndRange1: "40",
    StartRange2: "60",
    EndRange2: "70"
}

In the above object, StartRange and EndRange can be more items in different objects. i.e those values are obtained from a loop( StartRange + index), so there maybe StartRange1,2,3… lly, EndRange1,2,3…

The above object structure must be changed to,

{
   "Fire":{
      "Name":"Shark",
      "List":[
         [
            "10",
            "20"
         ],
         [
            "30",
            "40"
         ],
         [
            "60",
            "70"
         ]
      ]
   }
}

The List array inside the object is combination of [StartRange0,EndRange0],[StartRange1,EndRange2]… So on…

I tried,

let newObj = {}
newObj[oldObj.Type] = {
    Name: oldObj.Name, //oldObj is the first object defined above.
    List: [[oldObj.StartRange0,oldObj.EndRange0],[oldObj.tartRange1,oldObj.EndRange1],[oldObj.StartRange2,oldObj.EndRange2]]
}

But here, it is limited to StartRange2 and EndRange2 but I need it for StartRangeN and EndRangeN.

>Solution :

This is how I would have done map it

const input = {
  Type: "Fire",
  Name: "Shark",
  StartRange0: "10",
  EndRange0: "20",
  StartRange1: "30",
  EndRange1: "40",
  StartRange2: "60",
  EndRange2: "70"
}

const toList = (l) => Array.from({
  length: Object.keys(l).length / 2
}, (_, N) => [l[`StartRange${N}`], l[`EndRange${N}`]])

const toOutput = ({ Type, Name, ...rest }) => {
  const List = toList(rest)
  return ({
    [Type]: {
      Name,
      List
    }
  })
}

const output = toOutput(input)
console.log(output)

Leave a Reply