javascript - 将对象上的 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 方法无法访问超出其范围的任何内容.. 叹息!
如果有人可以提供帮助,那就太棒了!谢谢!
解决方案
在 Javascript 中,所有函数都可以从外部访问变量(称为“更高范围”)——这是该语言的优势之一,被称为“捕获”。
您的代码失败的原因是因为它this.sessionData
在function
声明中使用,这会导致问题,因为this
在 javascript 中......有点复杂。但你不需要它!
您还需要确保返回要输出的值。我会这样写:
this.sessionData = Object.keys(temp).map(key => temp[key]);
推荐阅读
- apache-kafka - 尝试使用Kafka将数据从服务器A发送到服务器B
- c++ - 如何解释嵌套的继承类结构?
- spring - 如何在本地重现“java.sql.SQLRecoverableException: Closed Connection”错误?
- ruby-on-rails - 如何对表单值进行操作?
- azure - 使用 NodePort 访问 azure kubernetes 集群
- class - Dart 确保类中的可选 List 参数不为空
- python - 在 Python (ldap3) 中模拟 LDAP 服务器
- rust - 无法用 crate 写入密钥文件
- heroku - 允许应用使用 Heroku 创建目录(甚至是临时的)
- c++ - 为什么在链接时搜索带有错误工具集的 boost 库?