Reputation: 3072
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?
Upvotes: 2
Views: 91
Reputation: 538
Here is an alternative using regex
let area = "73,159,160,178,165,340,70,382"
let regex = /\d+,\d+/g
match = area.match(regex).map(match => {
let [x, y] = match.split(",")
return {x, y}
})
console.log(match)
Upvotes: 1
Reputation: 30675
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; }
Upvotes: 1
Reputation: 11
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));
Upvotes: 1
Reputation: 31987
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)
Upvotes: 3