Как правильно проверить, доступно ли имя в массиве из объектов (коллекция записей)? - PullRequest
0 голосов
/ 07 июня 2019

поэтому я планировал, чтобы появилось сообщение с просьбой ввести имя студента.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);

Когда я пытаюсь этот код,он спрашивает у меня имя студента, а затем говорит, что он / она недоступен.По-видимому, определение того, что ученика нет в списке, должно быть сделано только после того, как цикл завершил проверку всех учеников.Тогда, и только если ничего не было найдено, должно появиться сообщение об ошибке.

Проблема для меня, концептуально, заключается в том, что конечное значение переменной, studentName, после окончания цикла for будет свойством nameпоследнего объекта в массиве.Итак, как мне изменить дизайн цикла for?

Как я могу изменить дизайн своего кода, чтобы добиться этого?

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

Вы можете попробовать это,

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);
0 голосов
/ 07 июня 2019

Во избежание зацикливания всего массива каждый раз, когда вы хотите показать сообщение для пользователя, наилучшим подходом является создание объекта из массива.

например:

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

const arrayToObject = (array) =>
   array.reduce((obj, item) => {
     obj[item.id] = item
     return obj
   }, {});

const studentsObject = arrayToObject(students);

console.log(studentsObject);
console.log(studentsObject[2]);
0 голосов
/ 07 июня 2019

Вы можете сначала отфильтровать свой список, а затем проверить его как

   const 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'
    }
];

let search = prompt('Type name of student');
while (search !== 'quit') {
    const filteredList = students.filter(function(student) {
        return student.name === search;
    });

    let message = '';
    if (filteredList.length > 0) {
        for (const student of filteredList) {
            message += '<h1>' + student.name + '</h1>';
            message += '<p>' + student.track + '</p>';
            message += '<p>' + student.achievements + '</p>';
            message += '<p>' + student.points + '</p>';
        }
        alert(message);
    } else {
        alert('That student does not exist. Try again');
    }
    search = prompt('Type name of student');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...