Как проверить объекты в массиве?
Начал изучать массивы и объекты (не очень хорошо усваивается)
задали ДЗ :
Написать простую программу авторизации. Создать массив
users, в котором каждый элемент – это объект типа “пользователь” со свойствами “имя”, “логин” и “пароль”. Программа должна запрашивать у пользователя логин и пароль при помощиprompt(), после чего проходить по массивуusersи искать в нем объект с такими же значениями. Если пользователь найден в массивеusers, то программа должна поздороваться с ним по имени. В противном случае должна появиться ошибка авторизации.
Вопрос, как правильно сделать проверку name, login, password для каждого объекта
var users = [];
users[0] = {
name:"nikita",
login:"nikita@",
password:"iii",
};
users[1] = {
name:"alex",
login:"alex@",
password:"lll"
};
var name = prompt('Введите свое имя');
var login = prompt('Введите свой логин');
var password = prompt('Введите пароль ');
if (name == users[0] && login == users[0] && password == users[0]) {
alert('здравствуй'+' '+name+' добро пожаловать в личный кабинет');
} else if (name == '' || login == '' || password == '') {
alert('Вы ввели не все данные');
} else if (name == users[1] && login == users[1] && password == user[1]) {
alert('Здравствуй'+ ' ' +name+' добро пожаловать в личный кабинет');
} else alert ('проверьте правильность ввода данных');
Ответы (2 шт):
Лучше всего проходить массив в цикле
const users_account= [
{name: 'Вася', login: 'Vasya123', password: 'Vasya'},
{name: 'Петя', login: 'Petya123', password: 'Petya'},
{name: 'Дима', login: 'Dima123', password: 'Dima'}
]
// const и let можно заменить на var если вы этого не проходили ещё
let user_asw = {
login: prompt('login'),
password: prompt('password')
}
for (let i = 0; i < users_account.length; i++) {
if (user_asw.login === users_account[i].login && user_asw.password === users_account[i].password) {
alert('Привет, ' + users_account[i].name);
break;
} else if (i === users_account.length - 1) {
alert('Такого пользователя нету :( ');
}
}
Если вам нужно проверить массив, то делать это надо в цикле. Проходите по массиву, сравниваете значения. Если нашли, то выходите из цикла. Что-то вроде
let user = null;
for(let i = 0; i< users.length; i++){
if(users[i].login == login && users[i].password == pwd){
user = users[i];
break;
}
}
и далее проверяете, что получилось
if(user) ...
else ...
либо с помощью встроенных функций массивов
const users = [
{name: 'Вася', password: 'Vasya123', login: 'Vasya'},
{name: 'Петя', password: 'Petya123', login: 'Petya'},
{name: 'Дима', password: 'Dima123', login: 'Dima'}
];
let login = prompt('логин');
let pwd = prompt('пароль');
let user = users.find(u => (u.login == login && u.password == pwd));
if(user){
console.log('hey ' + user.name);
}
else console.log(':(')