Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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

 

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
Дополнен 1 год назад
Кажется нашел ошибку, дело было в том что счетчик был общим, i увеличивался, даже когда значение не пушилось в массив, а потом я прибвалял к переменной averageResult по индексу i. Естественно прилетал undefined, так как там было пусто
Голосование за лучший ответ
vadim csgo Знаток (433) 1 год назад
Ваш код в выглядит корректно, и я не вижу проблемы с использованием localStorage. Однако, я обнаружил, что вы используете разные переменные для подсчета среднего результата: averageResults и averageResult. Пожалуйста, убедитесь, что вы используете правильные переменные.

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

 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 или какой-то другой частью кода, которую вы не предоставили.
ооо даа Знаток (256) 1 год назад
Ошибка в коде заключается в том, что переменная result не инициализирована и не определена в коде. Это может вызвать ошибку во время выполнения кода. Я предполагаю, что вместо result должна использоваться переменная averageResult.
DlazderМудрец (16917) 1 год назад
Мне ответ chatgpt не нужен. Это вырезка кода, и человек бы это понял
Похожие вопросы