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
Advertisement
Answer
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);