将对象的for循环转换为.map

时间:2019-02-06 15:00:57

标签: javascript arrays

有人告诉我我的职能:

 for (const key of Object.keys(temp)) {
 this.sessionData.push(temp[key]);
 }

现在必须改为使用.map,

我在下面尝试过此方法:

Object.keys(temp).map(function(key) {
  this.sessionData[key];
})

但是1我不知道它是否真正准确,而且,它无法访问其所在函数范围之外的数据,这是下面的整个函数:

public sessionData;

sessionDates(sessionsData) {
  const temp = {};
  this.sessionData = [];
  sessionsData.forEach(session => {
    const date = moment(session.startDatetime).format('DDMMYYYY');
    if (temp[date]) {
      temp[date].push(session);
    } else {
      temp[date] = [session];
    }
  });

Object.keys(temp).map(function(key) {
  this.sessionData[key];
})

尝试使用以下内容...会话数据未定义,无法访问范围?

    Object.keys(temp).map(function(key) {
  this.sessionData[key];
})

但这可行。.

 for (const key of Object.keys(temp)) {
 this.sessionData.push(temp[key]);
 }

因此,这个新的.map方法无法访问其范围之外的任何内容。

如果有人可以帮助,那就太好了!谢谢!

1 个答案:

答案 0 :(得分:2)

在Javascript中,所有函数都可以从外部访问变量(称为“更高范围”)-这是该语言的优势之一,被称为“捕获”。

您的代码失败的原因是因为它在this.sessionData声明中使用了function,从而解决了问题,因为javascript中的this有点复杂。但是您不需要它!

您还需要确保返回要输出的值。这是我的写法:

 this.sessionData = Object.keys(temp).map(key => temp[key]);