【问题标题】:JavaScript: Return associative array instead of common arrayJavaScript:返回关联数组而不是普通数组
【发布时间】:2020-03-20 16:52:49
【问题描述】:

我又指this answer了。

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;
}, []);

我必须改变什么来获得一个以事件标题(字符串)作为键和开始日期(日期对象)作为值的数组,以便我可以通过firstEvents['some event title']检索某个开始日期(日期对象)?

编辑:

当前输出:

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}]

需要的输出(伪):

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]

【问题讨论】:

  • JS 没有关联数组。它为此使用对象。
  • JavaScript 没有真正的关联数组。您可以构建一个普通对象,但不能使用.push() 等。
  • 那么你有什么建议? @palaѕн 我需要的是一个数组,我可以从中检索到给定事件标题的某个开始日期,而无需遍历该数组。
  • 请使用上面的代码发布您现在获得的数据以及它在您的帖子中应该是什么样子。您不需要发布 20 多个对象的数组,但请发布 4-5 个对象,以便用户了解您正在寻找的模式。
  • @palaѕн 做到了。

标签: javascript arrays


【解决方案1】:

不要使用push,而是用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();

或者使用一些演示数据:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2017-01-10
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多