const studentsArr = [{ name: 'Сергей', surname: 'Войлов', ratingPoint: 1000, schoolPoint: 1000, course: 2, }, { name: 'Татьяна', surname: 'Коваленко', ratingPoint: 880, schoolPoint: 700, course: 1, }, { name: 'Анна', surname: 'Кугир', ratingPoint: 1430, schoolPoint: 1200, course: 3, }, { name: 'Станислав', surname: 'Щелоков', ratingPoint: 1130, schoolPoint: 1060, course: 2, }, { name: 'Денис', surname: 'Хрущ', ratingPoint: 1000, schoolPoint: 990, course: 4, }, { name: 'Татьяна', surname: 'Капустник', ratingPoint: 650, schoolPoint: 500, course: 3, }, { name: 'Максим', surname: 'Меженский', ratingPoint: 990, schoolPoint: 1100, course: 1, }, { name: 'Денис', surname: 'Марченко', ratingPoint: 570, schoolPoint: 1300, course: 4, }, { name: 'Антон', surname: 'Завадский', ratingPoint: 1090, schoolPoint: 1010, course: 3 }, { name: 'Игорь', surname: 'Куштым', ratingPoint: 870, schoolPoint: 790, course: 1, }, { name: 'Инна', surname: 'Скакунова', ratingPoint: 1560, schoolPoint: 200, course: 2, }, ]; const budgetLimit = 5; const allowRating = 800; let id = 1; class CreateStudent { constructor(student) { CreateStudent.id.call(this) this.name = student.name; this.surname = student.surname; this.ratingPoint = student.ratingPoint; this.schoolPoint = student.schoolPoint; this.isSelfPayment = (student.ratingPoint >= allowRating ) ? student.isSelfPayment = false : student.isSelfPayment = true; this.course = student.course; } static id = function() { return this.id = id++;}; getTypeOfStudy() {if(this.isSelfPayment === false) { return `бюджет` } return `контракт` } getFullInfo() {return `Я - ${this.name} ${this.surname}, рейтинговый балл - ${this.ratingPoint}, форма обучения - ${this.getTypeOfStudy()}`}; getRankedPlace() { const index = fullListStudents.findIndex((stud) => stud.id == this.id) return index + 1; } }; let contract = []; const setAllCreatedStudentsByConstructor = arrOfStudents => { arrOfStudents = studentsArr.map((student) => new CreateStudent(student)); arrOfStudents.sort(function(currentStudent, nextStudent) {return nextStudent.ratingPoint - currentStudent.ratingPoint || nextStudent.schoolPoint - currentStudent.schoolPoint}); arrOfStudents.map(function(student, index) { if(index >= budgetLimit) { student.isSelfPayment = true; if (student.isSelfPayment === true) { contract.push(student) } } }) budget = arrOfStudents.filter(student => student.isSelfPayment === false) fullListStudents = [...budget,...contract].sort(function(currentStudent, nextStudent) {return nextStudent.ratingPoint - currentStudent.ratingPoint || nextStudent.schoolPoint - currentStudent.schoolPoint}); } setAllCreatedStudentsByConstructor(studentsArr) console.log(budget) console.log(contract) console.log(fullListStudents) console.log(contract[3].getFullInfo()) console.log(fullListStudents[2].getRankedPlace()) class Intern extends CreateStudent { constructor(companyName) { super(companyName); this.companyName = companyName = 'Google'; } getFullInternInfo() {return `Я - ${this.name} ${this.surname}, рейтинговый балл - ${this.ratingPoint}, форма обучения - ${this.getTypeOfStudy()}, интерн в компании ${this.companyName}`}; } interns = fullListStudents.map((companyName) => new Intern(companyName, 'Google')) console.log(interns[3].getFullInternInfo())