如何在登录函数中访问用户名密码列表内的任意元素
问题解决说明
首先原代码存在两处核心问题:
- 调用
signIn函数时传入的参数名错误:提前获取输入的变量是usernamePrompt、passwordPrompt,调用时错写为namePrompt、realNamePrompt,会导致参数传递失败。 - 校验逻辑固定写死了数组下标
0,只能匹配第一个用户的信息。
实现任意用户校验的修改方案
你可以通过遍历数组的所有元素完成逐个校验,常用两种写法:
写法1:基础for循环实现(兼容性最优)
var database = [ { username: "captain", password: "america" }, { username: "bruce", password: "banner" }, { username: "tony", password: "stark" } ] var usernamePrompt = prompt("Enter your name: "); var passwordPrompt = prompt("Enter your password: "); function signIn(user, pass) { let isValid = false; let loginUser = null; // 遍历整个database数组的所有元素 for (let i = 0; i < database.length; i++) { if (user === database[i].username && pass === database[i].password) { isValid = true; loginUser = database[i]; // 匹配到就跳出循环,不需要继续遍历 break; } } if (isValid) { alert("Welcome " + loginUser.username) } else { alert("Wrong username or password!") } } // 修正参数名 signIn(usernamePrompt, passwordPrompt)
写法2:Array.find方法实现(写法更简洁)
function signIn(user, pass) { // 查找数组中符合账号密码匹配规则的用户对象 const targetUser = database.find(item => item.username === user && item.password === pass); if (targetUser) { alert("Welcome " + targetUser.username) } else { alert("Wrong username or password!") } }
关于访问列表任意元素的补充说明
JavaScript数组的下标从0开始计数,如果你需要直接调用指定位置的元素,直接使用数组[下标]语法即可:
- 访问第一个元素:
database[0] - 访问第二个元素:
database[1] - 访问最后一个元素:
database[database.length - 1]
内容的提问来源于stack exchange,提问作者greasemach1ne
相关产品推荐
相关产品推荐

