Home > Net >  Convert string of co-ordinates to nested objects x and y
Convert string of co-ordinates to nested objects x and y

Time:10-29

I have the following string: area = "73,159,160,178,165,340,70,382"; And I need to convert it to the following format:

area = [
{
"x": 73,
"y": 159,
},
{
"x": 160,
"y": 178,
},
{
"x": 165,
"y": 340,
},
{
"x": 70,
"y": 382,
}
]

I can start by converting it to a normal array:

JSON.parse("["   area   "]")

But I'm now stuck on how to make the nested objects. How would I now know what is every other odd and even number and allocate it to the corresponding object?

CodePudding user response:

You can split the string by a comma and use a for loop to loop through the resulting array and construct the objects:

const str = "73,159,160,178,165,340,70,382"

const split = str.split(",")
const arr = []

for(let i = 0; i < split.length; i  ){
  arr.push({"x":split[i], "y":split[  i]})
}

console.log(arr)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

CodePudding user response:

I believe this is what you are trying to achieve? please note that I didn't add a code to check if the number of item In the array will be even or not, so if your newArea is odd this function will fail

function Convert(arrayOfArea){
    let Converted = [];
  let count = arrayOfArea.length/2;
  let mod = arrayOfArea.length%2;
  
  for(let i = 0; i < count; i  ){
    Converted.push({x:0 , y:0});
    Converted[i].x = arrayOfArea[i]
    Converted[i].y = arrayOfArea[i 1];
  }
  return Converted;
}

let strArea = "73,159,160,178,165,340,70,382";
let newArea = JSON.parse("[" strArea "]");
console.log(Convert(newArea));
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

CodePudding user response:

Here's another way of approaching this using String.split() and Array.reduce().

We use String.split to split the area string into an array, then use reduce to turn into the desired result. The shorthand is simply converting the string coordinates to numbers.

const area = "73,159,160,178,165,340,70,382";
const result = area.split(',').reduce((acc, s, i, a) => [...acc, ...((i % 2) ? [{ x:  a[i-1], y:  s}] : []) ], []);
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

  • Related