我需要遍历一个对象数组,并提示用户输入一个学生的名字。如果名称存在,我需要将学生的数据打印到屏幕上,否则继续迭代,直到用户类型退出。
我遇到的问题是,如果我键入最后一个对象的学生名称,学生的记录将在循环完成之前不会打印。
请参阅以下代码:
var students = [{
name: 'hacene',
track: 'Full Stack JavaScript',
achievements: 12,
points: 1226
},
{
name: 'dave',
track: 'PHP Development',
achievements: 128,
points: 14868
},
{
name: 'layla',
track: 'iOS Development',
achievements: 8,
points: 901
},
{
name: 'mika',
track: 'Front-End Development',
achievements: 15,
points: 1666
},
{
name: 'heisenberg',
track: 'Blue Meth Manufacturing',
achievements: 99,
points: 9999
}
];
var student;
var records = '';
var search;
// Print function to print the content
function print(message) {
var outputDiv = document.getElementById('output');
outputDiv.innerHTML = message;
}
// Access each students records in the array / a loop is needed to achieve this
for (var i = 0; i < students.length; i++) {
student = students[i];
console.log(student);
search = prompt('Please enter a student\'s name to see his records: ');
search = search.toLocaleLowerCase();
console.log(search);
if (search === student.name) {
records += '<h2><strong>Student: ' + student.name + '</strong><h2>';
records += '<p>Track: ' + student.track + '</p>';
records += '<p>Points: ' + student.points + '</p>';
records += '<p>Achievements: ' + student.achievements + '</p>';
break;
} else if (search === 'quit') {
break;
}
}
// Print the students' name; track, achievments and points
print(records);
我需要的是,能够从第一个提示符打印学生的记录,即使他是名单上的最后一个。
发布于 2019-08-08 14:19:01
你所做的更像是一个猜谜游戏:“在for循环中找到当前学生的名字”,我不知道你是否还需要一个答案,但下面是:
只需将提示放在for循环之前即可。在提示符之后,执行循环并在找到结果时停止。
var students = [{
name: 'hacene',
track: 'Full Stack JavaScript',
achievements: 12,
points: 1226
},
{
name: 'dave',
track: 'PHP Development',
achievements: 128,
points: 14868
},
{
name: 'layla',
track: 'iOS Development',
achievements: 8,
points: 901
},
{
name: 'mika',
track: 'Front-End Development',
achievements: 15,
points: 1666
},
{
name: 'heisenberg',
track: 'Blue Meth Manufacturing',
achievements: 99,
points: 9999
}
];
var student;
var records = '';
var search;
// Print function to print the content
function print(message) {
var outputDiv = document.getElementById('output');
outputDiv.innerHTML = message;
}
search = prompt('Please enter a student\'s name to see his records: ');
// Access each students records in the array / a loop is needed to achieve this
for (var i = 0; i < students.length; i++) {
student = students[i];
search = search.toLocaleLowerCase();
if (search === student.name) {
records += '<h2><strong>Student: ' + student.name + '</strong><h2>';
records += '<p>Track: ' + student.track + '</p>';
records += '<p>Points: ' + student.points + '</p>';
records += '<p>Achievements: ' + student.achievements + '</p>';
break;
}
}
// Print the students' name; track, achievments and points
print(records);<div id="output"></div>
您可以在循环中添加一个if语句。
if( search != "quit") {
for (var i = 0; i < students.length; i++) {
student = students[i];
search = search.toLocaleLowerCase();
if (search === student.name) {
records += '<h2><strong>Student: ' + student.name + '</strong><h2>';
records += '<p>Track: ' + student.track + '</p>';
records += '<p>Points: ' + student.points + '</p>';
records += '<p>Achievements: ' + student.achievements + '</p>';
break;
}
}
}有了它,如果您输入退出,您将不会进入循环。
即使它不能满足您的需求,更好的方法是使用find方法。
var students = [{
name: 'hacene',
track: 'Full Stack JavaScript',
achievements: 12,
points: 1226
},
{
name: 'dave',
track: 'PHP Development',
achievements: 128,
points: 14868
},
{
name: 'layla',
track: 'iOS Development',
achievements: 8,
points: 901
},
{
name: 'mika',
track: 'Front-End Development',
achievements: 15,
points: 1666
},
{
name: 'heisenberg',
track: 'Blue Meth Manufacturing',
achievements: 99,
points: 9999
}
];
var student;
var records = '';
var search;
// Print function to print the content
function print(message) {
var outputDiv = document.getElementById('output');
outputDiv.innerHTML = message;
}
function write(student) {
records += '<h2><strong>Student: ' + student.name + '</strong><h2>';
records += '<p>Track: ' + student.track + '</p>';
records += '<p>Points: ' + student.points + '</p>';
records += '<p>Achievements: ' + student.achievements + '</p>';
print(records);
}
search = prompt('Please enter a student\'s name to see his records: ');
student = students.find((element) => {
if (element.name == search) {
return true;
}
})
if (student) {
write(student);
};
// Print the students' name; track, achievments and points<div id="output"></div>
发布于 2019-08-07 16:04:42
我需要遍历一个对象数组,并提示用户输入一个学生的名字。如果名称存在,我需要将学生的数据打印到屏幕上,否则继续迭代,直到用户类型退出。
你需要重新考虑你的算法:
get input from user
while user does not enter "quit"
for each object in list
if name is the same as input
output the record
get input from user请注意,您需要从用户获得输入,然后遍历列表以搜索正确的对象。
或者,您可以使用对象而不是列表。这个外部对象将以学生的名字作为键,将对象记录作为值。现在,您可以对用户输入的学生姓名进行索引,以直接获取记录,而不是在列表中搜索。
发布于 2019-08-07 16:07:22
您需要继续提示用户,直到他们输入退出或您有匹配为止,而不是遍历学生以提示用户。
就像这样:
var quit = false
while(!quit) {
search = prompt('Please enter a student\'s name to see his records: ');
search = search.toLocaleLowerCase();
if (search === 'quit') {
quit = true;
continue;
}
// search for student here and if match is found then set quit to true
}https://stackoverflow.com/questions/57398320
复制相似问题