Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Else if语句将数组项更改为未定义_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript Else if语句将数组项更改为未定义

Javascript Else if语句将数组项更改为未定义,javascript,arrays,node.js,Javascript,Arrays,Node.js,所以这真的很奇怪,我完全不明白为什么会发生这种事。我正在Node.js中构建一个webapp,它接受.csv文件,解析它们,然后将它们插入MySQL数据库。以下是出现问题的函数: var router = require('express').Router(); var mysql = require('mysql2/promise'); var appVars = require('../../../../libs/Worker'); var dataObj = require('../../

所以这真的很奇怪,我完全不明白为什么会发生这种事。我正在Node.js中构建一个webapp,它接受.csv文件,解析它们,然后将它们插入MySQL数据库。以下是出现问题的函数:

var router = require('express').Router();
var mysql = require('mysql2/promise');
var appVars = require('../../../../libs/Worker');
var dataObj = require('../../libs/DataPass');
var frequents = require('../../libs/FrequentCalls');
var queryScript = require('../../../../libs/QueryExecute');

/*** POST ***/
router.post('/', add_mass_changes); 

async function add_mass_changes(req, res) {
  var user_login = req.login;
  var msg = '';
  var mass_changes = {};
  var location = req.location;
  if(req.files.file === undefined) {
    var fileSize = 0;
  }
  else {
    var fileSize = req.files.file.size;
  };

  if(fileSize > 0) {
    var data = req.files.file.data.toString('utf8');
    var lineArray = data.split('\r\n');
    var addMassChangesArray = [];
    if(lineArray[0].indexOf('login') === 0) {
      for(var i=1; i<lineArray.length; i++) {
        if(lineArray[i].trim() === "") {
          var clean = lineArray[i]
            .split('"')
            .map(function(v,i){ return i%2===0 ? v : v.replace(/,/g,''); })
            .join('"')
            .replace(/"/g, '');

          //Split by actual csv comma
          dataSplit = clean.split(',');

          if(dataSplit[1] === '') { //check to ensure effective_date is set
            var msg = 'effective_date column was left blank. Please fill it in and try again.';
            mass_changes = await frequents.getMassChanges(location, req);
            res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
            return
          }
          else if(dataSplit[7] !== 'Yes') {
            console.log(dataSplit[7])
            var msg = 'Column 8 must be Yes or No.';
            mass_changes = await frequents.getMassChanges(location, req);
            res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
            return
          }

          else if(dataSplit[0].length) {
            if(dataSplit.length === 23) {
              addMassChangesArray.push ({
                'col1' : dataSplit[0],
                'col2' : dataSplit[1],
                'col3' : dataSplit[2],
                'col4' : dataSplit[3],
                'col5' : dataSplit[4],
                'col6' : dataSplit[5],
                'col7' : dataSplit[6],
                'col8' : dataSplit[7],
                'col9' : dataSplit[8],
                'col10' : dataSplit[9],
                'col11' : dataSplit[10],
                'col12' : dataSplit[11],
                'col13' : dataSplit[12],
                'col14' : dataSplit[13],
                'col15' : dataSplit[14],
                'col16' : dataSplit[15],
                'col17' : dataSplit[16],
                'col18' : dataSplit[17],
                'col19' : dataSplit[18],
                'col20' : dataSplit[19],
                'col21' : dataSplit[20],
                'col22' : dataSplit[21],
                'col23' : dataSplit[22],
                'col24' : user_login
              });
            }
            else {
              var msg = 'Incorrect columns. Please use the sample csv and try again.';
              mass_changes = await frequents.getMassChanges(location, req);
              res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
            }
          }
        }
      }
      if(addMassChangesArray.length) {
        try {
          var msg = 'Success!';
          var action = 'Add Mass Changes';
          var table_name = 'mass_changes';

          add_mass_changes = await frequents.addMassChanges(req, addMassChangesArray);
          add_mass_changes = await frequents.addLog(req, action, table_name);
          mass_changes = await frequents.getMassChanges(location, req);
          res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
        }
        catch(e) {
          var msg = e;
          mass_changes = await frequents.getMassChanges(location, req);
          res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});  
        }
      }
    }
    else {
      var msg = 'First column is not what the tool expects. Please use the sample csv and try again.';
      mass_changes = await frequents.getMassChanges(location, req);
      res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
    }
  }
  else {
    var msg = 'No file... try that again.';
    mass_changes = await frequents.getMassChanges(location, req);
    res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
  }
}; 

module.exports = router;
当dataSplit[7]中的值不等于Yes时,console.log会吐出我在.csv文件中的值。然而,当该值等于yes时,它会以某种方式将其视为未定义的,并且该if语句仍会触发,从而安慰“未定义”

我在上面做一个类似的检查,检查一列是否为空,它是否工作

if(dataSplit[1] === '') {
  var msg = 'effective_date column was left blank. Please fill it in and try again.';
  mass_changes = await frequents.getMassChanges(location, req);
  res.render('mass_changes',{'mass_changes': mass_changes, 'msg':msg, 'user_login': user_login, csrfToken: req.session.csrfSecret});
  return
}
当我使用console.logdataSplit时,我得到的是:

[ 'abc2',
  '9/20/2018',
  'test',
  '',
  '1',
  '3',
  '1509',
  'Yes',
  '',
  '',
  'Reason',
  'Manager',
  '',
  '',
  'Y',
  'FT',
  '40',
  '',
  '',
  'CurrentLocation',
  'NewLocation',
  '9/16/2018',
  '9/22/2018' ]
[ '' ]

为什么我的if语句会将dataSplit[7]变成undefined,而if语句为true,而值为false,则为fine?试图包含我认为是相关的代码/信息。

问题可能是dataSplit[7]不存在。表示数据片段长度小于7或数据片段[7]处的值未定义

当您将“未定义”与“是”进行比较时,它是正确的

dataSplit=[“是”]; console.logdataSplit[7],dataSplit[7]
console.log dataSplit[7]!='是“您正在显示console.logdataSplit记录的两行代码。第一行包含预期的23个字段,但第二行只是一个空字符串。拆分空字符串时,将得到一个数组,其中包含一个空字符串[]。当您处理第二行时,您的问题就发生了

如果dataSplit[1]==由于没有dataSplit[1]而失败,则进行第一次测试。如果dataSplit[7]!=对由于没有dataSplit[7],因此其值未定义。测试成功,然后记录未定义

你可以跳过空行。在for循环的顶部,执行以下操作:

if (lineArray[i].trim() === "") {
    continue;
}

如果console.log语句返回的undefined比它自undefined以来返回的undefined多!='“是”,但仅当我的文件中的值与“是”匹配时,它才等于“未定义”。它作为值处理的任何其他值,并且不是未定义的。如果该值等于Yes,它将不会进入If语句。。。。所以不确定它将如何做任何事情…它不应该进入if语句,但它是。你确定控制台日志来自于else if块吗?更新了问题以显示console.logdataSplit。如你所见,第八个值是“是”,我明白你的意思,但不是100%理解解决方案。我明白了,我应该把它放到for循环中,但具体在哪里?在循环的最开始,就在var clean=OK之前,我就是这么想的,但似乎没有解决它。我肯定我做得不对。。。我已经更新了这个问题的第一段代码,包含了整个.js文件,其中包含了对您的答案所做的更改。您希望在行不为空时执行其余代码,但仅在行为空时执行。为什么不复制我的代码,使用continue跳过循环体的其余部分?
if (lineArray[i].trim() === "") {
    continue;
}