【问题标题】:Using map/filter behavior on Map instance在地图实例上使用地图/过滤器行为
【发布时间】:2018-09-05 04:50:27
【问题描述】:

我有这条特快路线:

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

【问题讨论】:

  • 在你的过滤方法中你需要返回一些东西来映射

标签: javascript node.js ecmascript-6 es6-map


【解决方案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()

【讨论】:

    【解决方案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());

    【讨论】:

    • 键和值是同一类型,但不一定是同一个对象。如果是,则应使用 Set 而不是 Map
    • @Bergi 是的。当我尝试测试它时,我得到的答案和你的完全一样:(
    猜你喜欢
    • 2014-12-16
    • 2015-11-04
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多