I have an array of objects that is indexed and I want to iterate through it to convert it to a new flat array.
This is the array of objects:
"attentionSchedules": [
{
"room": "1",
"schedules": [
{
"days": [
"SA",
"WE"
],
"_id": "6271xxxx",
"initialTimeStr": "12:00 am",
"finalTimeStr": "12:00 am",
"initialTime": "2022-05-03T06:00:00.000Z",
"finalTime": "2022-05-03T06:00:00.000Z"
}
],
"place": {
"loc": {
"type": "Point",
"coordinates": [
-88.03xxx,
15.49xxx
]
},
"_idPlace": "5d5ba845xxx",
"name": "Labs",
"address": "xxx"
},
"floor": 1
},
{
"room": "23",
"floor": 1,
"schedules": [
{
"days": [
"MO",
"TH",
"WE",
"YOU",
"FR",
"SA"
],
"_id": "62754264a627af5fc44286b3",
"initialTimeStr": "08:00 am",
"finalTimeStr": "09:00 pm",
"initialTime": "2022-05-06T14:00:00.000Z",
"finalTime": "2022-05-07T03:00:00.000Z"
}
],
"place": {
"loc": {
"type": "Point",
"coordinates": [
-88.02xxx,
15.50xxx
]
},
"_idPlace": "ba",
"name": "Labs",
"address": "xx"
}
}
],
I want to iterate over it, get its values and convert it to a new object like this:
{
lng: -88.02xxx
lat: 15.50xxx
_idPlace: "ba"
}
.
.
.
N
How can I do this? I'm using angular, I'm doing the method with javascript/types Currently I did something like this:
let locCoord: any[] = [];
this.attentionSchedules?.forEach(elm => {
for (const [key, value] of Object.entries(elm.place.loc)) {
let lng = value[0];
let lat = value[1];
let dataObjLoc = {
_id: elm.place._id,
lat: lat,
lng: lng
}
locCoord.push(dataObjLoc);
}
});
console.log(locCoord);
And it returns the following:
[
{
"_idPlace": "5d5ba84531f75411f3b6417e",
"lat": "or",
"lng": "P"
},
{
"_idPlace": "5d5ba84531f75411f3b6417e",
"lat": 15.4997741,
"lng": -88.03860120000002
},
{
"_idPlace": "6109766f913cf469f6b177ba",
"lat": "or",
"lng": "P"
},
{
"_idPlace": "6109766f913cf469f6b177ba",
lat: 15.5085874,
"lng": -88.0264096
}
]
It is not what I need, since when using Object.entries it not only extracts the values but also duplicates the keys. Somebody could help me? Please
CodePudding user response:
I'm not sure you need to loop over Object.entries(elm.place.loc)
(if I've understood the problem). I think you can just extract the values somewhat directly:
const attentionSchedules = [{"room":"1","schedules":[{"days":["SA","WE"],"_id":"6271xxxx","initialTimeStr":"12:00 am","finalTimeStr":"12:00 am","initialTime":"2022-05-03T06:00:00.000Z","finalTime":"2022-05-03T06:00:00.000Z"}],"place":{"loc":{"type":"Point","coordinates":[-88.03,15.49]},"_idPlace":"5d5ba845xxx","name":"Labs","address":"xxx"},"floor":1},{"room":"23","floor":1,"schedules":[{"days":["MO","TH","WE","YOU","FR","SA"],"_id":"62754264a627af5fc44286b3","initialTimeStr":"08:00 am","finalTimeStr":"09:00 pm","initialTime":"2022-05-06T14:00:00.000Z","finalTime":"2022-05-07T03:00:00.000Z"}],"place":{"loc":{"type":"Point","coordinates":[-88.02,15.5]},"_idPlace":"ba","name":"Labs","address":"xx"}}];
let locCoord = [];
attentionSchedules?.forEach(({ place }) => {
const [lng, lat] = place.loc.coordinates;
locCoord.push({
_id: place._idPlace,
lat: lat,
lng: lng
});
});
console.log(locCoord);