javascript - 如何正确检查名称是否在由对象(记录集合)组成的数组中可用?
问题描述
所以我的计划是显示一条消息,要求某人输入学生姓名。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 循环呢?
我怎样才能重新设计我的代码来实现这一点?
解决方案
你可以试试这个
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);
推荐阅读
- r - 继续收到此错误:“dimnames(x) <- dn 中的错误:'dimnames' [2] 的长度不等于数组范围”
- javascript - 有没有办法在 datalist 元素中呈现可点击的选项标签?
- r - 在R中将数据框拆分为一定数量的组
- bash - 在bash中转换日期格式
- html - 如何将背景图像(png 图像格式)添加到具有伪元素 ::before 的 div
- amazon-web-services - AWS 系统管理器 + CodeDeploy + Lightsail
- java - 使用模式匹配 instanceof 和 switch 表达式的 Gradle Java 编译错误
- drupal - 将一个类型的内容引用到另一个常量类型
- unit-testing - EFCore xunit 断言 .Include 是否被调用
- python - “未找到 Python,但可以从 Microsoft 商店安装”