var message = '';
var user;
var student;
function print(message) {
var outputd = document.getElementById('output');
outputd.innerHTML = message;
}
var students = [
{
name: 'Dave', track: 'Front End Development', achievements: 158, points: 14730 },
{ name: 'Jody', track: 'iOS Development with Swift', achievements: '175', points: '16375'
},
{ name: 'Jordan', track: 'PHP Development', achievements: '55', points: '2025'
},
{ name: 'John', track: 'Learn WordPress', achievements: '40', points: '1950'
},
{ name: 'Trish', track: 'Rails Development', achievements: '5', points: '350'
}
];
function studentreport( studen ){
var report = '<h2>student: ' + studen.name + '</h2>';
report += '<br>'+ 'track: ' + studen.track + '</br>';
report += '<br>' + 'achivements: ' + studen.achivements + '</br>';
report += '<br>' + 'points: ' + studen.points + '</br>';
return report
};
while (true){
user = prompt("what student are you looking for?");
if (user === 'quit'){
break;
}
for (var i = 0; i< students.length; i += 1){
student = students[i];
if (student.name === user){
message = studentreport(student);
print(message);
} else if (student.name !== user){
alert('no student with that name, try again');
}
}
}
поэтому я понимаю весь код, но в конце если student.name === user, так что отсюда, если это / true, тогда функция отчета студента запускается с аргументом студента. Но как же получить индекс аргумента студента? например, как он узнает, что имя / где начать с объекта массива выше, передается из если заявление, если да, то как? Я просто очень запутался в этой части. * /
Спасибо всем за помощь
Метод подсказки используется, чтобы запросить у пользователя имя студента или выйти после этого, поскольку (var i = 0; i <student.length; i + = 1) проходит через массив объектов студентов, и когда имя ввода совпадает с ним сохранит найденного студента в переменной student и после этого вызовет метод studentreport.
Нет, на самом деле он перебирает каждого ученика в массиве:
for (var i = 0; i< students.length; i += 1){ /CODE GOES HERE/ }
i
используется в качестве индекса. Мы тестируем students.length
, чтобы определить, сколько итераций, и i+=1
увеличивает i
в каждом цикле итераций. Дает нам возможность students[i]
получить доступ к каждому элементу. Это помогает?
Взгляните на эту статью. Красиво выложено: dev.to/kartik2406/better-loops-in-javascript-2716
Итак, основной интерес в ваших кодах - это все, что находится в цикле while. Итак, давайте посмотрим, что происходит внутри этого цикла.
// Here we start the while(true) loop so until we break this will keep running
while (true) {
// Now we ask the user for a students and
// and save it to a variable called user.
user = prompt("what student are you looking for?");
// Here we check if the user has typed quit and if so break the loop
if (user === "quit") {
break;
}
// This is the important part:
// Here we create a for loop and it will keep looping until
// it no longer less than the length of the student array.
// This means that the i variable can be used as the current index
for (var i = 0; i < students.length; i += 1) {
// Each iteration of the loop we save the current student ( student[i] )
// to a variable called student.
student = students[i];
// Remember that each student in the array is an object.
// Since we saved that object to the student variable we can now access
// the name property of that object by calling student.name
// So here we are now just checking if student.name is equal to the
// name the user entered.
if (student.name === user) {
// If the the name matches, we have found our student and we can now
// generate a student report. We save this report to a variable message.
message = studentreport(student);
// Finally we print out this message.
print(message);
}
else if (student.name !== user) {
// If the current student doesn't match the inputed name then
// we alert an error message.
alert("no student with that name, try again");
}
}
}
Одна небольшая проблема заключается в том, что сообщение об ошибке будет выдаваться несколько раз, пока текущий ученик, на которого мы смотрим в цикле, не совпадет с вводом пользователя. Чтобы исправить это, мы можем немного изменить наш код.
while (true) {
user = prompt("what student are you looking for?");
if (user === "quit") {
break;
}
for (var i = 0; i < students.length; i += 1) {
student = students[i];
if (student.name === user) {
message = studentreport(student);
print(message);
// Once we find the student we are looking for we can break out of the loop
break;
}
}
// This code will never get reached if we find the student
// because we break out of the loop. But if we don't find the
// student then we can alert the user.
alert("no student with that name, try again");
}
Надеюсь, это поможет! Удачи с вашим проектом!
Если бы код был отформатирован правильно, его было бы гораздо легче читать.
while (true) {
user = prompt('what student are you looking for?');
if (user === 'quit') {
break;
}
for (var i = 0; i < students.length; i += 1) {
student = students[i];
if (student.name === user) {
message = studentreport(student);
print(message);
} else if (student.name !== user) {
alert('no student with that name, try again');
} // It is easy to see where the if and else are
} // It is easy to see this is the end of the for loop
}
Но было бы намного проще читать в современном функциональном стиле циклы for.
Использование такого цикла while означает, что поток пользовательского интерфейса заблокирован, и вы не увидите никаких результатов, пока не наберете quit. Используйте обработчики событий, и поток пользовательского интерфейса можно обновлять бесплатно. Наличие кнопки поиска, которая запускает ваш код при событии щелчка, означает, что нет постоянно запущенного цикла кода блокировки.
function print(message) {
var outputd = document.getElementById('output');
outputd.innerHTML = message;
}
var students = [
{
name: 'Dave',
track: 'Front End Development',
achievements: 158,
points: 14730
},
{ name: 'Jody', track: 'iOS Development with Swift', achievements: '175', points: '16375' },
{ name: 'Jordan', track: 'PHP Development', achievements: '55', points: '2025' },
{ name: 'John', track: 'Learn WordPress', achievements: '40', points: '1950' },
{ name: 'Trish', track: 'Rails Development', achievements: '5', points: '350' }
];
function studentreport(studen) {
var report = '<h2>student: ' + studen.name + '</h2>';
report += '<br>' + 'track: ' + studen.track + '</br>';
report += '<br>' + 'achivements: ' + studen.achivements + '</br>';
report += '<br>' + 'points: ' + studen.points + '</br>';
return report;
}
document.getElementById('search').addEventListener('click', function() {
const user = document.getElementById('user').value;
const student = students.find(s => s.name === user);
if (student) {
const message = studentreport(student);
print(message);
} else {
print('no student with that name, try again');
}
});
what student are you looking for? <input id = "user" type = "text"><button id = "search">Search</button><br>
<div id = "output"></div>
students
- это массив. Массивы индексируют свое содержимое, начиная с0
. У вас есть цикл, который идет от0
к тому, что на единицу меньше, чем количество элементов в массиве. Переменная цикла увеличивается на единицу при каждой итерации. Эта переменная используется для изоляции каждого элемента массива по одному.