0

I'm referring to this answer again.

var firstEvents = events.reduce(function(ar, e) {
  var id = e.getId();
  if (e.isRecurringEvent() && e.isAllDayEvent() && !ar.some(function(f) {return f.eventId == id})) {
    ar.push({eventTitle: e.getTitle(), eventId: id, startDate: e.getAllDayStartDate(), endDate: e.getAllDayEndDate()});
  }
  return ar;
}, []);

What do I have to change to get an array with the event titles (Strings) as keys and the start dates (Date objects) as values so I can retrieve a certain start date (Date object) via firstEvents['some event title']?

EDIT:

Current Ouput:

firstEvents = [{eventTitle=Event title 1, eventId=xyz1@google.com, startDate=Sun Mar 18 00:00:00 GMT+01:00 2018, endDate=Mon Mar 19 00:00:00 GMT+01:00 2018},
               {eventTitle=Event title 2, eventId=xyz2@google.com, startDate=Tue Mar 19 00:00:00 GMT+01:00 2019, endDate=Wed Mar 20 00:00:00 GMT+01:00 2019},
               {eventTitle=Event title 3, eventId=xyz3@google.com, startDate=Fri Mar 20 00:00:00 GMT+01:00 2020, endDate=Sat Mar 21 00:00:00 GMT+01:00 2020}]

Needed Output (Pseudo):

firstEvents = ['Event title 1' => Sun Mar 18 00:00:00 GMT+01:00 2018,
               'Event title 2' => Tue Mar 19 00:00:00 GMT+01:00 2019,
               'Event title 3' => Fri Mar 20 00:00:00 GMT+01:00 2020]
Ben
  • 1,550
  • 1
  • 16
  • 24
  • 1
    JS doesn't have associative arrays. It uses objects for that. – Barmar Mar 20 '20 at 16:53
  • 1
    JavaScript doesn't have real associative arrays. You can build a plain object, but you can't use `.push()` etc. – Pointy Mar 20 '20 at 16:53
  • So what would you suggest? @palaѕн What I need is an array from which I can retrieve a certain start date to a given event title without looping through the array. – Ben Mar 20 '20 at 17:25
  • Please post what data you are getting right now using the above code and what it should look like in your post. You don't need to post an array of 20+ objects but please post 4-5 objects, so that users can understand the patter you are looking for. – palaѕн Mar 20 '20 at 17:28
  • @palaѕн Did it. – Ben Mar 20 '20 at 18:08

1 Answers1

1

Do not use push, but set to object with key.

ar = {}; // You may need to change source parameter too
// you cannot change input Array [] to Object {} type inside function
// you can get Array and return Object, but source variable will not change
ar[e.getTitle()] = e.getAllDayStartDate();

Or using some demo data:

var ar = [
{
    eventTitle: 'one',
    eventId: '#1',
    startDate: new Date(),
    endDate: new Date()
},
{
    eventTitle: 'two',
    eventId: 'secondId',
    startDate: new Date(),
    endDate: new Date()
}];
var retVal = {};
for (var i of ar) {
    retVal[i.eventId] = i;
}
console.log(JSON.stringify(retVal, null, 2));
console.log(retVal['#1']);
console.log(retVal.secondId);
Jan
  • 2,178
  • 3
  • 14
  • 26