Может кто-нибудь объяснить, как это работает, пожалуйста

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, тогда функция отчета студента запускается с аргументом студента. Но как же получить индекс аргумента студента? например, как он узнает, что имя / где начать с объекта массива выше, передается из если заявление, если да, то как? Я просто очень запутался в этой части. * /

Спасибо всем за помощь

students - это массив. Массивы индексируют свое содержимое, начиная с 0. У вас есть цикл, который идет от 0 к тому, что на единицу меньше, чем количество элементов в массиве. Переменная цикла увеличивается на единицу при каждой итерации. Эта переменная используется для изоляции каждого элемента массива по одному.
Scott Marcus 18.12.2018 23:01

Метод подсказки используется, чтобы запросить у пользователя имя студента или выйти после этого, поскольку (var i = 0; i <student.length; i + = 1) проходит через массив объектов студентов, и когда имя ввода совпадает с ним сохранит найденного студента в переменной student и после этого вызовет метод studentreport.

Tibor Fekete 18.12.2018 23:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
56
3

Ответы 3

Нет, на самом деле он перебирает каждого ученика в массиве:

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

Bibberty 18.12.2018 23:10

Итак, основной интерес в ваших кодах - это все, что находится в цикле 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>

Другие вопросы по теме