首页 > 解决方案 > 如何正确检查名称是否在由对象(记录集合)组成的数组中可用?

问题描述

所以我的计划是显示一条消息,要求某人输入学生姓名。Javascript 会查看一个单独的 JS 文件中的记录,然后将其输出到消息变量中。如果假设学生不存在,则输出消息将是 else 语句中的警告框。

以下是学生的记录:

var students=[
    {
        name:'Chris',
        track:'IOS',
        achievements:'100',
        points:'1000'
    },
    {
        name:'John',
        track:'Web Design',
        achievements:'90',
        points:'1000'
    },
    {
        name:'Brent',
        track:'Front-End',
        achievements:'70',
        points:'1000'
    },
    {
        name:'Josh',
        track:'Full-Stack',
        achievements:80,
        points:'1000'
    },
    {
        name:'Nick',
        track:'AI',
        achievements:'60',
        points:'1000'
    }
];

var message="";
    var search=prompt("Type name of student");
    while (search!=="quit") {
      for (var i=0; i<students.length; i+=1) {
        var studentName=students[i].name;
        if (studentName===search) {
          message+="<h1>"+studentName+"</h1>";
          message+="<p>"+student[i].track+"</p>";
          message+="<p>"+student[i].achievements+"</p>";
          message+="<p>"+student[i].points+"</p>";
          break;
        } else {
                alert("That student does not exist. Try again");
                break;
        }
        }
        search=prompt("Type name of student");
    }
    print(message);

当我尝试此代码时,它会询问我学生的姓名,然后说他/她不在。显然,只有在循环检查完所有学生后才能确定学生不在列表中。然后,并且只有在没有找到任何东西的情况下,才应该输出失败消息。

从概念上讲,对我来说,问题在于 for 循环结束后变量 studentName 的最终值将是数组中最后一个对象的 name 属性。那么我将如何重新设计我的 for 循环呢?

我怎样才能重新设计我的代码来实现这一点?

标签: javascriptarraysoopobjectfor-loop

解决方案


你可以试试这个

var message="";
    var search=prompt("Type name of student");
    while (search!=="quit") {
    // we will get result if any one student name matches
    var result = students.find((student) => student.name === search);
    if (result) {

          message+="<h1>"+result.name+"</h1>";
          message+="<p>"+result.track+"</p>";
          message+="<p>"+result.achievements+"</p>";
          message+="<p>"+result.points+"</p>";
    }
    else {
        alert("That student does not exist. Try again");
    }
        search=prompt("Type name of student");
    }
    print(message);

推荐阅读