javascript - 为什么 includes() 在我的代码中不能正常工作?
问题描述
我在 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 函数 - 但它是一样的......
也许你们中的一些人会看到这段代码的错误,或者我的想法不好?
感谢每一个提示和答案!
解决方案
正如我们在评论中粘贴的图像中所看到的(为什么不应该这样做),您没有电子邮件数组,您有一个对象数组,其中包含在其某些属性(电子邮件)中的电子邮件。
您可以使用Array.prototype.some()如果某些元素存在将函数作为参数传递,则返回 true 或 false items.some(o => o.email === mail)
Array.prototype.includes()不接受函数作为参数。
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
推荐阅读
- tableau-api - 如何在 Tableau 中将 3 个直方图组合成 1 个图形?
- r - R:根据条件(不同大小的数据框)从另一个数据框的列为列分配值
- qt - QT CLI 选项添加更多值名称
- python - Pandas - 每个唯一 ID 的累积和
- c# - 使用了命名连接字符串,但在应用程序的配置中找不到该名称
- image - 在flutter中使用ColorFilter替代容器的装饰图像
- p5.js - 如何访问数组中的值
- python - 如果第一个键的值匹配,则从字典列表中删除这两个项目
- reactjs - Change Grid item column order on small screens
- reactjs - 如何在反应js中获取行ID并传递给同一行但不同列的复选框?