gpt4 book ai didi

javascript - 函数仅检查数组中的最后一项

转载 作者:行者123 更新时间:2023-12-03 00:58:28 25 4
gpt4 key购买 nike

我有一个功能可以验证用户提交的电子邮件。我通过将用户电子邮件与每个有效电子邮件域进行比较来做到这一点。我将用户提交的电子邮件存储在一个数组中,并将有效的电子邮件域也存储在一个数组中。问题是使用该函数时,它仅检查用户数组中的最后一个值是否有效,而不检查其之前的元素。

我的功能:

handelTeamError = () => {
var array = []; //user emails get put in here
var emailcheck = EmailDomeinen(); //array with valid email domains
const emailrow = this.state.rows.map(x => array.push(x.email)); //every email that user submitted

//if user submitted nothing function will return false; user can't continue
if(!emailrow){
this.setState(() => ({tlemailError: true}));
return false;
}else{
for(let i = 0; i < emailcheck.length; i++){
let email = emailcheck[i]; //get all the valid emails
for(let j = 0; j < array.length; j++){
let res = array[j].split("@", 1).toString(); //checks if user typed more than only the email domain
if(!array[j].endsWith("@" + email)){ //if the user value ends with @ and a valid email domains
this.state.rows.map( x => x.tlEmailError = true); //error state = true
}else{
if(res){
this.state.rows.map( x => x.tlEmailError = false); //error state = false
return true; // user can continue
}
}
}
}
return false;
}
};

最佳答案

我发现您的方法存在一些问题。

首先 emailrow 看起来总是一个数组(空或已填充),因此 if(!emailrow){ 将始终返回 false。您应该使用 if(!emailrow.length){

然后,您的算法似乎正在检查每个用户电子邮件是否以所有有效域结尾,这是可以理解的。您的外循环应该是用户电子邮件,您的内循环应该尝试查找有效域之一是否与其匹配。

最后,您似乎试图直接修改 this.state.rows 内的状态,而不是使用 setState 函数,这是正确的方法。

因此,重构版本可能是

// this assumes that you have a sigle tlEmailError property in your state 
// and not one for each email
handelTeamError = () => {
const validDomains = EmailDomeinen(); //array with valid email domains
const userEmails = this.state.rows.map(row => row.email); //every email that user submitted

// check if all emails are valid
const allValid = userEmails.every(email => {
const isValid = email.indexOf('@') > 0,
userDomain = email.split('@')[1];

return (isValid && validDomains.some(domain => domain === userDomain));
});

const result = userEmails.length && allValid;

this.setState({
tlEmailError: result
});

return result;
}

关于javascript - 函数仅检查数组中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com