首页 > 解决方案 > 将对象上的 for 循环转换为 .map

问题描述

有人告诉我我的功能:

 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 方法无法访问超出其范围的任何内容.. 叹息!

如果有人可以提供帮助,那就太棒了!谢谢!

标签: javascriptarrays

解决方案


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

您的代码失败的原因是因为它this.sessionDatafunction声明中使用,这会导致问题,因为this在 javascript 中......有点复杂。但你不需要它!

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

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

推荐阅读