Javascript Else if语句将数组项更改为未定义
所以这真的很奇怪,我完全不明白为什么会发生这种事。我正在Node.js中构建一个webapp,它接受.csv文件,解析它们,然后将它们插入MySQL数据库。以下是出现问题的函数: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('../../
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;
}