Как полностью перебрать массив объектов?
Почему метод find возвращает только первый объект с массива?
Как правильно сделать чтобы проверяло целый массив на это условие?
Сейчас работает только первый логин и пароль, а когда вводишь второй - срабатывает второе условие, хотя должно сработать первое, потому что все верно.
const storedData = [
{
email: "[email protected]",
pw : 'qqq'
},
{
email : "[email protected]",
pw : "www"
}
];
document.querySelector('#submit').addEventListener('click', e => {
e.preventDefault();
storedData.find(data => {
console.log(data);
if (data.email === document.querySelector('#login').value && data.pw === document.querySelector('#pw').value) {
console.log("ok");
}else {
console.log("inccorect login or pw");
}
return true;
});
});
<form action="">
login <input type="text" id="login">
password <input type="password" id="pw">
<input type="submit" value="Submit" id="submit">
</form>
Ответы (3 шт):
Метод find останавливается, в случае, если результатом выполнения callback функции является true.
Так как у тебя всегда возвращается true - то поиск заканчивается сразу.
Вы используете метод find() не по назначению: он возвращает первый подходящий элемент (то есть элемент, для которого функция-параметр возвращает truthy значение) и дальше ничего не перебирает.
Если вам не нужно возвращаемое значение, а нужно просто перебрать весь массив с какими-то действиями, используйте forEach() или цикл for-of.
Или же, если при помощи find() нужно проверить, подходят ли данные хоть для одного элемента массива, возвращайте true только в случае совпадения и проверяйте возвращённое find() значение.
const storedData = [
{
email: "[email protected]",
pw : 'qqq'
},
{
email : "[email protected]",
pw : "www"
}
];
document.querySelector('#submit').addEventListener('click', e => {
e.preventDefault();
const found = storedData.find(data => {
console.log(data);
return data.email === document.querySelector('#login').value &&
data.pw === document.querySelector('#pw').value;
});
if (found) console.log("ok");
else console.log("inccorect login or pw");
});
Можно ещё использовать метод some().