【问题标题】:converts to double array after declaring req.body声明 req.body 后转换为双精度数组
【发布时间】:2018-12-02 03:02:27
【问题描述】:

我正在尝试为一个变量启动一个 foreach,该变量可以是单个 id 或多个 id 的数组。首先,我尝试验证它是否是一个数组,如果不是,我将它声明为一个只有 1 项的数组。

router.post("/providerQuote", function (req, res) {
  console.log(req.body.idQuote);
  var idQuote = [];
  if(req.body.idQuote.isArray)
  {
    idQuote = Object.values(req.body.idQuote);
  }else{
    idQuote = [req.body.idQuote];
  }
  console.log(idQuote);
  idQuote.forEach(function (quote){
    console.log(quote);
    });

这是控制台日志:

Server Started...
[ '5bfed54c9b0d061574d874c0', '5bfed54c9b0d061574d874bf' ]
[ [ '5bfed54c9b0d061574d874c0', '5bfed54c9b0d061574d874bf' ] ]
[ '5bfed54c9b0d061574d874c0', '5bfed54c9b0d061574d874bf' ]

这里的问题是它以某种方式将 req.body 插入到另一个数组中。

【问题讨论】:

  • 你的意思是使用if (Array.isArray(req.body.idQuote))

标签: javascript arrays node.js


【解决方案1】:

据我了解,您所说的响应中的 idQuote 值可能是一个字符串,也可能是一个字符串数组,而您试图始终只有一个字符串数组。如果我是正确的,我会将您的代码更改为以下内容:

router.post("/providerQuote", function (req, res) {
  console.log(req.body.idQuote);
  var idQuote = req.body.idQuote;
  if(!Array.isArray(idQuote)) {
    idQuote = [idQuote];
  }

  console.log(idQuote);
  idQuote.forEach(function (quote){
    console.log(quote);
    });

如果 idQuote 当前不是数组,这将简单地将您的 idQuote 包装在一个数组中。

通过将 idQuote 变量默认为 req.body.idQuote,我正在做一些事情:

  1. 我正在简化代码。如果 idQuote 实际上是一个数组,那就没什么可做的了!我们很高兴。
  2. 当我们需要以任何一种方式使用它时,我们不会多次重新输入 req.body.idQuote。编程中有一个首字母缩略词称为 DRY,意思是“不要重复自己”。如果您发现自己多次执行相同的操作,则可能有一种方法可以简化您的代码。
  3. 我正在避免进行过多的处理。您的原始代码创建了一个空数组,然后用不同数组的值填充它。完全没有冒犯你,但是当你有一个看起来完全正确的完美数组时,这是相当多的不必要的工作(在内存中创建一个全新的数组对象,然后循环遍历一个数组,将其值复制到一个新数组中)你想要的方式。 过度处理会花钱:在服务器上,这意味着您将需要更快的服务器,因为如果事情更高效,您将无法处理尽可能多的事情。在客户端上,过多的处理意味着电池消耗,有时会导致不稳定和滞后的用户体验。寻找可以改进的小事是件好事,因为虽然一件小事并不重要,但如果代码中有很多小事,它们可以很快加起来,尤其是当它们处于一个长循环中时。您在此过程中学到的小技巧实际上很有帮助。

也知道isArray是Array上的一个方法。由于您没有括号,因此您基本上是在检查当前对象是否具有 isArray 方法,并且我很确定没有任何方法(因为它是 Array 类上的静态方法),然后将您推倒进入你将它包装在一个数组中的其他地方。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

【讨论】:

    【解决方案2】:

    我觉得你可以试试这个

    if ( Array.isArray(req.body.idQuote) ) {
      // Perform your operations here
    } else {
      idQuote.push(req.body.idQuote)
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多