首页 > 解决方案 > 为什么 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 函数 - 但它是一样的......

也许你们中的一些人会看到这段代码的错误,或者我的想法不好?

感谢每一个提示和答案!

标签: javascriptarraysreactjs

解决方案


正如我们在评论中粘贴的图像中所看到的(为什么不应该这样做),您没有电子邮件数组,您有一个对象数组,其中包含在其某些属性(电子邮件)中的电子邮件。

您可以使用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


推荐阅读