You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历比较对象数据并实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:17:52