我正在尝试从textarea读取CSV数据,然后根据条件 - 如果它们通过或不通过 - 将它们推入两个不同的数组。我很挣扎,我理解为什么我的代码多次插入数据(因为我的for循环,虽然我不知道如何解决这个问题)但我不知道为什么它会在成功和失败的数组中插入它们。这是我到目前为止所尝试的 - 必须是纯粹的javascript - 并原谅我的命名,这不是伟大的atm:
var addValue = document.getElementById('example').value;
filter = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
num = /0{2,}|1{2,}|2{2,}|3{2,}|4{2,}|5{2,}/,
cur = new Date(),
abbr = ["PA", "CT", "NJ", "MA", "IL", "ID", "OR"],
successArray = [];
failedArray = [];
if (addValue != "") {
var CSVvalue = addValue.split(',');
information.push(CSVvalue);
for (var i = 0; i <= information.length - 1; i++) {
for (var j = 0; j <= abbr.length - 1; j++) {
var email = information[i][3],
birthdate = new Date(information[i][2]),
zipCode = information[i][5],
diff = cur - birthdate,
age = Math.floor(diff / 31536000000),
state = information[i][4];
if ((filter.test(email)) && (!num.test(zipCode)) && (age > 21) && ((state != abbr[j]))) {
var lastSuccessArray = [];
successArray.push(information);
lastSuccessArray.push(successArray.slice(0));
} else {
var lastFailArray = [];
failedArray.push(information);
lastFailArray.push(failedArray.slice(0));
}
}
}
} else {
alert("You must enter a value");
}
答案 0 :(得分:2)
在推送成功数组检查之前
if ( failedArray.indexOf( information[i] ) == -1 )
{
successArray.push(information[i]);
}
,反之,对于失败的数组
if ( successArray.indexOf( information[i] ) == -1 )
{
failedArray.push(information[i]);
}
您的代码显然可以进行优化,但是对于您,我们需要了解有关阵列和逻辑的更多详细信息。
答案 1 :(得分:2)
var addValue = document.getElementById('example').value;
filter = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
num = /0{2,}|1{2,}|2{2,}|3{2,}|4{2,}|5{2,}/,
cur = new Date(),
abbr = ["PA", "CT", "NJ", "MA", "IL", "ID", "OR"],
successArray = [];
failedArray = [];
var information = [];//use array information in here
if (addValue != "") {
var CSVvalue = addValue.split(',');
information.push(CSVvalue);
for (var i = 0; i <= information.length - 1; i++) {
//no need of forloop 'j' using in here
var email = information[i][3],
birthdate = new Date(information[i][2]),
zipCode = information[i][5],
diff = cur - birthdate,
age = Math.floor(diff / 31536000000),
state = information[i][4];
if ((filter.test(email)) && (!num.test(zipCode)) && (age > 21) && ((abbr.indexOf(state) == -1))) {
var lastSuccessArray = [];
successArray.push(information);
lastSuccessArray.push(successArray.slice(0));
} else {
var lastFailArray = [];
failedArray.push(information);
lastFailArray.push(failedArray.slice(0));
}
}
} else {
alert("You must enter a value");
}
不要使用forloop abbr
这会将值推到abbr的长度。所以只需使用abbr.indexOf(state) == -1
。