JavaScript

Не могу понять почему код на js не работает.

Не могу понять что не так. Задача сайта просто создавать массив из заданных чисел в input и выдать сумму чисел которые кратны 7 и имеют 1 на конце.
Обьясните пожалуйста! Спасибо.
Код html:
 Введите числа, а мы сложим числа кратные 7 и оканчиваются на 1. 

Добавить число
Результат
ожидаем
Код JavaScript:
 function summary(fig) { 
const numbers = document.getElementById("input2").value;
const mass = [];
if (fig === 0) {
mass.push(numbers);
} else if (fig === 1) {
const mass2 = mass.filter(function(element) {
return (element % 7 == 0 && element % 10 == 1);
});
const mass3 = mass2.reduce(function(prev, cur) {
return prev + cur;
});
document.querySelection("#sum").innerHTML = mass3;
}
}
Проблема в том, что массив mass создается заново при каждом вызове функции summary(), поэтому добавленные числа не сохраняются между вызовами функции.

Для решения этой проблемы массив mass следует объявить вне функции summary(), чтобы он был доступен для всех вызовов функции. Вот исправленный код JavaScript:

const mass = []; // объявляем массив вне функции

function summary(fig) {
const numbers = Number(document.getElementById("input2").value); // преобразуем введенное значение в число
if (fig === 0) {
mass.push(numbers);
} else if (fig === 1) {
const mass2 = mass.filter(function(element) {
return (element % 7 === 0 && element % 10 === 1);
});
const mass3 = mass2.reduce(function(prev, cur) {
return prev + cur;
}, 0); // устанавливаем начальное значение для reduce
document.querySelector("#sum").innerHTML = mass3;
}
}
Кроме того, следует обратить внимание на то, что в функции filter() и reduce() необходимо использовать оператор строгого равенства === вместо нестрогого ==. Также в функции reduce() следует установить начальное значение аргумента prev равным 0, чтобы избежать ошибки при попытке сложить элементы пустого массива.

Теперь при нажатии на кнопку "Добавить число" введенное число будет добавляться в массив mass, а при нажатии на кнопку "Результат" будут вычислены сумма чисел, которые кратны 7 и оканчиваются на 1, и результат будет выведен на странице.
Алексей Баталяхин
Алексей Баталяхин
3 288
Лучший ответ
Область видимости твоего "mass" - функция. Чтобы данные сохранялись между вызовами, надо сделать "mass" глобальной.
Область видимости "mass2" - блок else if. Его не существует при вызове "reduce".
Сам запрос для пользователя не сходится с кодом. Ты просишь "числа" а работаешь как с "числом".
Может ещё есть косяки, код не тестил.
*222** ****
*222** ****
23 960
; не поставлена
Skull ???
Skull ???
6 704
Что, в консоле ошибок нет?
попробуй это:
function summary(fig) {
const numbers = document.getElementById("input2").value;
const mass = [];
if (fig === 0) {
mass.push(numbers);
} else if (fig === 1) {
const mass2 = mass.filter(function(element) {
return (element % 7 == 0 && element % 10 == 1);
});
const mass3 = mass2.reduce(function(prev, cur) {
return prev + cur;
}, 0); // Add initial value to the reduce accumulator
document.querySelector("#sum").innerHTML = mass3;
}
}