#javascript #arrays #average
#javascript #массивы #среднее
Вопрос:
Я пытаюсь исключить значения «0» из массива, чтобы получить лучший средний результат.
мой массив: [0, 0, 0, 0, 80, 90, 100, 0]
function clacGPA(gradeData) {
var sum, avg = 0;
if (gradeData.length) {
sum = gradeData.reduce(function (a, b) {
return a b;
});
avg = sum / gradeData.length;
}
document.getElementById('gpa').innerText = avg.toFixed(2);
}
My expected result should be:
avg = 80 90 100 / 3
Комментарии:
1. Создайте новый массив, используя функцию
filter
только для получения длины, это не нормально.
Ответ №1:
Сначала просто отфильтруйте значения 0:
clacGPA([0, 0, 0, 0, 80, 90, 100, 0]);
function clacGPA(gradeData) {
const filtered = gradeData.filter(item => item !== 0);
const sum = filtered.reduce((a, b) => a b);
const avg = sum / filtered.length;
console.log(avg);
}
Ответ №2:
Вы можете использовать функцию reduce
с аккумулятором, который хранит количество и сумму.
let arr = [0, 0, 0, 0, 80, 90, 100, 0];
let result = arr.reduce((a, c) => {
if (c !== 0) {
a.count ;
a.sum = c;
}
return a;
}, {count: 0, sum: 0});
if (result.count) console.log(result.sum / result.count);