【问题标题】:destructuring base on dynamic value es6基于动态值 es6 的解构
【发布时间】:2019-04-26 02:39:23
【问题描述】:

我有一个 express 端点,我需要从前端获取查询传递

const { filterType1, filterType2 } = req.query

问题是 filterType 来自其他地方,说它是数组列表

const list = ['priceFilter', 'ageFilter', 'destinationFilter']

我可以这样做吗?

const { list.map(o => o) } = req.query 表示

const { priceFilter , ageFilter, destinationFilter } = req.query

【问题讨论】:

  • 不,这是不可能的,因为这需要动态变量名。
  • 可能是重复的(但我暂时不会关闭你的):stackoverflow.com/q/35939289/5768908
  • @CertainPerformance 如果不可能,我应该如何解决上述问题?你有一个来自其他地方的列表,你想在这里传入 req.query.somethingdynamic。我是否必须对其进行硬编码,下次更新列表时我必须手动修改查询参数?
  • 简单,只是不要解构 - 相反,只需遍历 list 数组(或 Object.entriesreq.query
  • @Hanz:问题已经解决了。只是不要解构

标签: javascript node.js express ecmascript-6


【解决方案1】:

您可以根据filterTypes数组过滤请求的查询参数,然后通过迭代访问filters

function getFilters(req, filterTypes) {
  return Object.keys(req.query).reduce((acc, k) => {
    const isAllowedFilter = filterTypes.some(type => type === k);
    if (isAllowedFilter) {
      return { ...acc, [k]: req.query[k] };
    }
    return acc;
  }, {});
}

const filterTypes = ['priceFilter', 'ageFilter', 'destinationFilter'];

const req = {
  query: {
    priceFilter: '50-100',
    ageFilter: '8-20',
    destinationFilter: 'foo',
    unknownFilter: 'unknown',
  },
};

const filters = getFilters(req, filterTypes);

Object.keys(filters).forEach(k => console.log(`${k} -> ${filters[k]}`));

【讨论】:

  • 我不想得到过滤器,我想通过它。
猜你喜欢
  • 2020-08-21
  • 2018-09-15
  • 1970-01-01
  • 2021-08-28
  • 2019-12-01
  • 2010-10-04
  • 2018-05-04
  • 2020-05-19
  • 2016-06-26
相关资源
最近更新 更多