1

我有这条快速路线:

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 类型的方法?

4

2 回答 2

1

我想你正在寻找

const stopped = Array.from(runningJobs.keys())
  .filter(j => j.id === jobId)
  .map(j => j.stopThisInstance());

除此之外,您还可以使用在迭代器上工作的函数,filter例如mapMap.keys()的 。

于 2018-03-26T22:51:39.233 回答
1

由于键和值是同一个对象,您可以提取其中一个,然后将其转换为数组。
如果直接将 map 转换为数组,它将在[[key, value],[key, value], ...]结构中。然后选择索引 0:

const stopped = Array.from(runningJobs)
  .map(job => job[0])
  .filter(key => key.id === jobId)
  .map(key => key.topThisInstance());

于 2018-03-26T22:58:19.693 回答