Skip to content
Advertisement

How to iterate an array of indexed objects

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

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