Что вы можете сделать, это дать каждой кнопке общий класс, чтобы вы могли итеративно связывать прослушиватель событий с каждым из них. Затем присвойте им атрибут value
.
Всякий раз, когда в ваш массив помещается новая запись, вы просто вызываете функцию для обновления среднего. Ваша логика c почти правильна, просто эти строки не имеют особого смысла:
return sum / arr.length;
document.getElementById("demo").innerHTML;
См. Пример проверки концепции ниже:
const arr = [];
function updateAverage() {
const sum = arr.reduce((prev, curr) => prev + curr, 0);
document.getElementById('demo').innerText = sum / arr.length;
// For debugging only
document.getElementById('arr').innerText = JSON.stringify(arr);
document.getElementById('sum').innerText = sum;
document.getElementById('len').innerText = arr.length;
}
document.querySelectorAll('.btn').forEach((button) => {
button.addEventListener('click', () => {
const value = +button.value;
arr.push(value);
updateAverage();
});
});
<button class="btn" value="1">1</button>
<button class="btn" value="2">2</button>
<button class="btn" value="3">3</button>
<button class="btn" value="4">4</button>
<button class="btn" value="5">5</button>
<br />
Average Rating:
<p id="demo">0</p>
<br /><br/ >
For debugging:
<ul>
<li>Array: <span id="arr"></span></li>
<li>Sum: <span id="sum"></span></li>
<li>Length: <span id="len"></span></li>
</ul>