开发者问题收集

如何将数据推送到打字稿中可能尚不存在的对象键

2021-10-07
664

我在这里定义了一个接口:

interface Notification {
  fullDate: string;
  weekday: string;
  info: {
    title: string;
    subtitle: string;
    read: boolean;
  };
}

后来,我定义了一个该类型的 const:

const orderedNotifications: { [month: string]: Notification[] } = {};

我从外部获取数据并使用 foreach 循环,从中获取包含从相同月份检索的数据的对象列表。我想检查对象是否以该月份为键,如果没有,则创建它并将所有类似月份的数据推送到该键。我尝试过这样的方法:

orderedNotifications[month].push({
  fullDate,
  weekday,
  info,
});

其中 month 是带有帖子月份的变量。不幸的是,我收到 TypeError:无法读取未定义的属性(读取“推送”)

2个回答

您收到 TypeError:无法读取未定义的属性(读取“push”) ,因为 month 键未在 orderedNotifications 对象内定义。

使用以下代码:

// This line will solve your issue as it is
// checking if the key already exist do nothing
// otherwise set empty array on it.
orderedNotifications[month] = orderedNotifications[month] || [];

orderedNotifications[month].push({
  fullDate,
  weekday,
  info,
});
ziishaned
2021-10-07

只需添加一个 if 检查,如果尚不存在则添加它...我真傻。

if (!(month in orderedNotifications)) {
      orderedNotifications[month] = [
        {
          fullDate,
          weekday,
          info,
        },
      ];
    } else {
      orderedNotifications[month].push({
        fullDate,
        weekday,
        info,
      });
    }
Stephan Psaras
2021-10-07