Top.Mail.Ru
Ответы

Ошибка в коде js

Голову ломаю два дня, не могу найти решение проблемы.
Есть код, который высчитывает средний балл на основе пройденных тестов.
Массив allTests содержит все тесты, а цикл проверяет какие из ячеек существуют в локальном хранилище. Проблема в том что если какой то ячейки нету цикл выдает NaN в конце. Лазил дебаггером, проблема в том что цикл почему то в конце (result__3-1) берет undefined

1234567891011121314151617181920
 

const allTests = ['result__1-1', 'result__1-2', 'result__2-1', 'result__2-2', 'result__2-3', 'result__3-1'];

let averageResults = []; 
for (let i in allTests) {
   // тут высчитывается общее количество пройденных тестов, ничего интересного
   if (localStorage.getItem(allTests[i])) { 
      result++;
   };
   // Вот тут высчитывается средний балл, проблема здесь
   if (localStorage.getItem(allTests[i]) !== null) { 
      averageResults.push(localStorage.getItem(allTests[i])); 
      console.log('averageresults[i]', averageResults[i]) 
      averageResult += Number(averageResults[i]); 
      debugger 
   }; 
}; 
 
averageResult /= averageResults.length; 

Вот ссылка на страничку: https://dlazder.github.io/Astronomicschool/html/other/profile.html

Дополнен

Кажется нашел ошибку, дело было в том что счетчик был общим, i увеличивался, даже когда значение не пушилось в массив, а потом я прибвалял к переменной averageResult по индексу i. Естественно прилетал undefined, так как там было пусто

По дате
По рейтингу
Аватар пользователя
Знаток

Ошибка в коде заключается в том, что переменная result не инициализирована и не определена в коде. Это может вызвать ошибку во время выполнения кода. Я предполагаю, что вместо result должна использоваться переменная averageResult.

Аватар пользователя
Знаток

Ваш код в выглядит корректно, и я не вижу проблемы с использованием localStorage. Однако, я обнаружил, что вы используете разные переменные для подсчета среднего результата: averageResults и averageResult. Пожалуйста, убедитесь, что вы используете правильные переменные.

Вместо использования индекса i для доступа к элементам массива averageResults, вы можете напрямую использовать значение, полученное из localStorage. Вот исправленный код:

123456789101112131415161718192021
 const allTests = ['result__1-1', 'result__1-2', 'result__2-1', 'result__2-2', 'result__2-3', 'result__3-1']; 
 
let averageResults = []; 
let averageResult = 0; 
let result = 0; 
 
for (let i in allTests) { 
  if (localStorage.getItem(allTests[i])) { 
    result++; 
  }; 
 
  if (localStorage.getItem(allTests[i]) !== null) { 
    let currentResult = Number(localStorage.getItem(allTests[i])); 
    averageResults.push(currentResult); 
    console.log('averageresults[i]', currentResult); 
    averageResult += currentResult; 
  }; 
}; 
 
averageResult /= averageResults.length; 
 

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