Метод for...of JS Ecma6

Студентам нужно набрать 70 баллов, чтобы сдать экзамен. Данная программа объявляет массив с результатами. Напишите код для подсчета и вывода в консоль количества студентов, успешно сдавших экзамен.

let scores = [68,95,54,84,77,75,63,74,69,80,71,63]

let passedExam =[];// объявляем массив для сдавших студентов

for (let value of scores){
for (value > 70) { //определяем студентов, набравший проходной балл 
    passedExam.push; //добавляем сдавших студентов к новому массиву
}
console.log(passedExam.length);// Определяем число сдавших путем вычисления длины массива
}

Подскажите, пожалуйста, что я делаю не так?


Ответы (3 шт):

Автор решения: Илья Паймушкин

Вам нужно переписать следующим образом

let scores = [68,95,54,84,77,75,63,74,69,80,71,63]

let passedExam =[];// объявляем массив для сдавших студентов

for (let value of scores){
    if(value > 70) { //определяем студентов, набравший проходной балл 
        passedExam.push(value); //добавляем сдавших студентов к новому массиву
    }
}

console.log(passedExam.length);// Определяем число сдавших путем вычисления длины массива
→ Ссылка
Автор решения: SmartMonkey

Здесь несколько ошибок:

  1. опечатка в определении условия (for вместо if)
  2. сама проверка должна быть >=
  3. метод push нужно вызывать, и вызывать с аргументом
  4. консоль лог нужно вынести из цикла
let scores = [68, 95, 54, 84, 77, 75, 63, 74, 69, 80, 71, 63]

let passedExam = [];// объявляем массив для сдавших студентов

for (let value of scores) {
  if (value >= 70) { //определяем студентов, набравший проходной балл 
    passedExam.push(value); //добавляем сдавших студентов к новому массиву
  }
}
console.log(passedExam.length);// Определяем число сдавших путем вычисления длины массива

Ну и конечно лучше оформить код как функцию. Да и к алгоритму есть вопросы (например зачем нужен массив "passedExam", можно просто пополнять счетчик):

const commonScores = [68, 95, 54, 84, 77, 75, 63, 74, 69, 80, 71, 63];

const countPassedExam = (scores) => {
  let result = 0;

  for (let value of scores) {
    if (value >= 70) {
      result += 1;
    }
  }
  return result;
}

console.log(countPassedExam(commonScores));

Ну и последний этап, JS это высокоуровневый язык, такие ориентированы на удобство чтения кода, циклы это низкоуровневый инструмент, для лучшей "понятности" лучше пользоваться функциями высшего порядка:

const commonScores = [68, 95, 54, 84, 77, 75, 63, 74, 69, 80, 71, 63];

const countPassedExam = (scores) => scores.filter((s) => s >= 70).length;

console.log(countPassedExam(commonScores));
→ Ссылка
Автор решения: fortavey

Если использовать for of не обязательно, то можно и покомпактнее:

const passedExam = scores.filter(el => el > 70);
→ Ссылка