【问题标题】:Use variables only if exists into a array filter express仅当存在于数组过滤器中时才使用变量
【发布时间】:2021-04-10 20:53:18
【问题描述】:

我有一个带有一些变量的端点,它们中的每一个都可以存在或不存在,这取决于我必须对数组执行过滤函数并应用来自 req.body 的规则的变量。

有没有办法在过滤函数的返回中应用 if 条件?

代码是这样的:

test.getModelsFile = async (req, res) => {
 let data = json;
 const SubModel = req.body.SubModel;
 const Years = req.body.Years;
 const Engine = req.body.Years;
 const Make = req.body.Make;

  let result = data.filter((x) => {
   return x.Make == Make(Years) && x.Years == Years && x.Engine == Engine && x.SubModel == SubModel;
  });
result = await deleteRepeatedFromArray(result, "Model");
res.send(result);
};

这只有在这些变量来自 req.body 时才有效,如果不是,它将返回错误,我该怎么办?

【问题讨论】:

  • 如果变量不存在于正文中,那么您希望发生什么? const Engine = req.body.Years; 看起来像是错字?
  • 我不想应用那个特定的过滤器,如果没有 Years 变量,我不希望它在过滤器函数中

标签: javascript node.js api express


【解决方案1】:

制作一个您要查看的属性的数组。然后您可以使用Array.prototype.every 来检查每个属性:

  • req.body 中不存在,或者
  • 存在,并且等于被迭代项的属性
test.getModelsFile = async (req, res) => {
   const properties = ['SubModel', 'Years', 'Engine', 'Make'];
   const result = json.filter(item => properties.every(
      prop => !req.body[prop] || req.body[prop] === item[prop]
   ));
   const payload = await deleteRepeatedFromArray(result, "Model");
   res.send(payload);
};

【讨论】:

  • 只对 SubModel 和 Make 属性起作用,其他的都没有,这正常吗?
  • 我认为您的const Engine = req.body.Years; 是错字,但您之前没有回复我评论的那部分内容。是吗?或者您真的是想让 Engine 和 Years 包含来自请求的 .Years 属性的相同值?
  • 是的,这是一个错字,sry
猜你喜欢
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
相关资源
最近更新 更多