Как создать экземпляр класса конструктора в Javascript? - PullRequest
2 голосов
/ 27 мая 2020

Я пытался создать экземпляр функции конструктора, если один из элементов массива, созданных из экземпляра конструктора, не имеет того же адреса электронной почты.

let users = [];
class User{
    constructor(email, name, age, lang){
         this.email = email;
         this.name = name;
         this.age = age;
         this.lang = lang
    }
    save(){
        users.push(this)
    }
}

function validate(email, name, age, lang){
    let uEmail = email;
    users.forEach(ele =>{
        if(ele.email == email){
            console.log('You have account with us')
        }else if(!ele.email){
          creatObj(uEmail, name, age, lang)
        }
     })

 }
function creatObj(email,name, age, lang){
    new User('s@s.com',name, age, lang).save()
}

, когда я запускал код с тот же адрес электронной почты, который мне нужен, чтобы не передавать sh этот экземпляр в массив пользователей. к сожалению, он продолжает подталкивать экземпляр, даже если условие не выполняется. I was expecting the users array to contain elements if they have unique email

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 27 мая 2020

Лучше всего использовать поиск по ключу (например, адрес электронной почты в нижнем регистре). И используйте правильную структуру данных (например, Object, Map, Set), чтобы вам не приходилось искать по всему массиву.

Минимально измененная версия вашего кода:

const usersByEmail = {};
class User{
    constructor(email, name, age, lang){
         this.email = email;
         this.name = name;
         this.age = age;
         this.lang = lang
    }
    save(){
        usersByEmail[this.email.toLowerCase()] = this;
    }
}

function getOrCreateUser(email, name, age, lang){
    if (email.toLowerCase() in usersByEmail) {
        console.log('You have account with us');
    } else {
        new User(email ,name, age, lang).save();
    }
    return usersByEmail[email.toLowerCase()];
}

getOrCreateUser('s@s.com', 'sam', 32, 'en');
getOrCreateUser('s@s.com', 'samuel', 23, 'es');
getOrCreateUser('a@b.com', 'other guy', 44, 'en');
getOrCreateUser('s@s.com', 'sam', 32, 'en');

console.warn('as object...');
console.log(usersByEmail);

console.warn('as array...');
console.log(Object.values(usersByEmail));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...