我在React中对此功能有疑问
createContact = (item) => {
let items = this.state.items;
let email = this.state.email;
if (items.length < 10 &&
items.includes(email) === false &&
EmailValidator.validate(email) === true) {
this.setState(state => ({
button: true,
items: state.items.concat([ item ]),
info: '✔ You have successfully added an user.'
}))
}
else if (EmailValidator.validate(email) === false) {
this.setState(state => ({
button: true,
items: state.items,
info: '! User has\'t been added - the email was invalid. Try again!'
}))
}
else if (items.includes(email) === true){
this.setState(state => ({
button: false,
items: state.items,
info: '! This email exists on this list.'
}))
}
}
问题在于代码items.includes(email)
的这一部分。
我使用这部分代码检查电子邮件是否在列表中(如果不在列表中)。
但这总是返回'false'-如果列表中是否存在电子邮件...
我尝试使用此indexOf函数-但这是相同的....
也许你们中的一些人会看到此代码上的错误,或者我的想法不好?
感谢所有提示和答案!
答案 0 :(得分:1)
正如我们在粘贴有评论(why you should not doing that)的图像中所看到的那样,您没有电子邮件数组,有一个对象数组,其中某些属性(电子邮件)中包含电子邮件。
如果存在某些将参数传递为参数的元素items.some(o => o.email === mail)
Array.prototype.some()不接受函数作为参数,则可以使用Array.prototype.includes()返回true或false。
var items = [{
"email": "some@email.com"
},
{
"email": "some@email2.com"
},
{
"email": "some@email3.com"
}
]
var mail = "some@email.com";
var mail2 = "some@email4.com";
(items.some(o => o.email === mail)) ? console.log(true): console.log(false);
(items.some(o => o.email === mail2)) ? console.log(true): console.log(false);
最后,请阅读为什么我们不应该粘贴代码图像:https://meta.stackoverflow.com/a/285557/6121568