为什么include()在我的代码中效果不佳?

时间:2018-08-09 13:11:10

标签: javascript arrays reactjs

我在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函数-但这是相同的....

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

感谢所有提示和答案!

1 个答案:

答案 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