如何遍历比较对象数据并实现ATM程序PIN验证关联姓名功能?
控制台ATM PIN验证问题修复与对象数据遍历指南
嘿,我来帮你搞定这个ATM程序的PIN验证问题,顺便给你讲讲怎么正确遍历和比对对象数组里的数据!
首先看你当前的代码,核心问题出在循环逻辑的顺序上:你在遍历LoginAcess数组的每一项时,都弹出一次输入框让用户输PIN,这会导致用户要重复输入3次PIN,而且只有最后一次输入刚好匹配最后一条记录时才会输出姓名,完全不符合预期。另外还有个细节问题:prompt返回的是字符串类型,而你的pass是数字类型,直接用===全等比较会匹配失败,得先做类型转换。
修正后的PIN验证代码
function Authentication(){ const LoginAcess = [ {"name" : "bradly cooper", "pass" : 1990}, {"name" : 'james berry', "pass" : 1989}, {"name" : "sarah lance", "pass" : 1980}, ]; // 先获取用户输入的PIN,转成数字类型 const inputPin = Number(prompt("enter your 4 valid digit pin : ")); // 遍历数组找匹配的记录 for (const eachRecord of LoginAcess) { if (inputPin === eachRecord.pass) { console.log(`Welcome back, ${eachRecord.name}!`); return; // 找到匹配项后直接退出函数,不用继续遍历 } } // 如果遍历完都没找到匹配项,提示错误 console.log("Invalid PIN, please try again."); }; Authentication();
关于遍历和比较对象数组的常用方法
这里给你整理几种实用的遍历对象数组并做条件匹配的方式:
- for...of 循环:像上面代码里用的,直接遍历数组的每一个元素,语法简洁易读,适合需要逐个检查且可能提前终止的场景。
- Array.forEach() 方法:另一种遍历方式,适合不需要中途停止循环的情况:
LoginAcess.forEach(record => { if (inputPin === record.pass) { console.log(record.name); } }); - Array.find() 方法:最适合这种“找单个匹配项”的场景,它会直接返回第一个符合条件的元素,代码更简洁:
const matchedUser = LoginAcess.find(record => record.pass === inputPin); if (matchedUser) { console.log(matchedUser.name); } else { console.log("Invalid PIN"); }
这些方法都能帮你高效地遍历对象数组,根据条件快速定位到对应的数据~
内容的提问来源于stack exchange,提问作者Abayomi Olowu
相关产品推荐
相关产品推荐

