我有这条快递路线:
app.use('/stop_jobs', function (req, res, next) {
const jobId = req.query && req.query.job_id;
const stopped : Array<any> = [];
for (let j of runningJobs.keys()) {
if(j.id === jobId){
stopped.push(j.stopThisInstance());
}
}
res.json({success: {stopped}});
});
其中
const runningJobs = new Map<CDTChronBase,CDTChronBase>();
(CDTChronBase是一个班级)
上述作品,但我想尽可能简化它,如下所示:
app.use('/stop_jobs', function (req, res, next) {
const jobId = req.query && req.query.job_id;
const stopped = runningJobs.keys().filter(j => {
return j.id === jobId;
})
.map(v => {
return j.stopThisInstance()
});
res.json({success: {stopped}});
});
但是对于我的生活,我无法弄清楚如何在Map上获取任何方法的Array实例。有没有办法在Map对象上使用map / filter类型方法?
答案 0 :(得分:2)
由于键和值是同一个对象,您可以提取其中一个,然后将其转换为数组
如果直接将map转换为数组,它将处于[[key, value],[key, value], ...]
结构中。然后选择索引0:
const stopped = Array.from(runningJobs)
.map(job => job[0])
.filter(key => key.id === jobId)
.map(key => key.topThisInstance());
&#13;
答案 1 :(得分:1)
我认为你正在寻找
const stopped = Array.from(runningJobs.keys())
.filter(j => j.id === jobId)
.map(j => j.stopThisInstance());
除此之外,您还可以使用filter
and map
functions that work on iterators,例如地图的.keys()
。