#javascript #arrays #function #math
#javascript #массивы #функция #математика
Вопрос:
У меня есть задача написать функцию getEvenAverage
, которая должна принимать только один аргумент — массив. Эта функция должна return
получать среднее значение четных чисел из этого массива. Если в массиве нет четных чисел, функция должна вернуть null
.
Я был бы очень признателен за любую обратную связь 🙂
function getEvenAverage(tab) {
{
if (i % 2 === 0) {
for (var i = 0; i < tab.length; i ) {
sum = parseInt(tab[i], 10);
}
var avg = sum / tab.length;
} else
console.log('null');
}
}
Комментарии:
1. Ваша функция ничего не возвращает
2.Я думаю, вам чего-то не хватает в вашем примере? слишком много фигурных скобок (
{
}
)3. Не используйте
var
, используйтеlet
вместо этого! (Это напрямую покажет вам некоторые из допущенных вами ошибок)4. @emil несколько дополнительных инструкций блока действительно сбивают с толку, но они не меняют способ работы кода 🙂
Ответ №1:
Вы говорите, что вам нужно что-то вернуть, поэтому return
это. Также переместите свой if
оператор внутри вашего for
цикла и исправьте несколько других синтаксических ошибок. И, как указано в комментариях, вы должны разделить sum
на количество четных чисел, чтобы получить свой avg
:
function getEvenAverage(tab) {
var sum = 0;
var evens = 0;
for (var i = 0; i < tab.length; i ) {
if (i % 2 === 0) {
sum = parseInt(tab[i], 10);
evens ;
}
}
if (evens == 0) {
console.log("null");
return null;
} else {
var avg = sum / evens;
return avg;
}
}
console.log(getEvenAverage([1, 2, 3]));
Комментарии:
1. я думаю, вам не следует делить на tab.length , а на то, сколько четных чисел было
2. О да, мой плохой @giorgim.
3. Исправлено сейчас @giorgim, есть что-нибудь лучше?
4. Я согласен, я просто придерживался идеи OP о том, что должен делать их код.
5. Да, @mrdeadsven, я добавлю это.
Ответ №2:
Вы также могли бы сделать это с помощью уменьшения массива, с помощью одного обхода массива
const reducer = (acc, val) => {
let {
sum,
count
} = acc;
return (val % 2 === 0 ? {
sum: sum val,
count: count 1
} : acc);
};
const getEvenAverage = (input) => {
const initialValue = {
sum: 0,
count: 0
};
const output = input.reduce(reducer, initialValue);
if (output.count === 0) {
return null;
} else {
return output.sum / output.count;
}
};
console.log(getEvenAverage([1, 2, 3]));
Ответ №3:
Вот правильная функция.
function getEvenAverage(tab) {
var sum = 0, count = 0;
for (var i = 0; i < tab.length; i ) {
if (i % 2 === 0) {
sum = parseInt(tab[i], 10);
count ;
}
}
if(sum > 0)
return (sum / count);
return null;
}
Желаю вам счастливого кодирования.
Ответ №4:
Помимо использования цикла for, вы можете использовать методы фильтрации и сокращения массива.
function getEvenAverage(arr) {
const newArr = arr.filter(number => number % 2 === 0);
return newArr.length > 0 ? newArr.reduce((acc, num) => acc num) / newArr.length : null;
}
console.log(getEvenAverage([1, 2, 3, 4]));
console.log(getEvenAverage([1, 3, 5, 7]));
Ответ №5:
Попробуйте эту функцию,
function getEvenAverage(tab) {
var numberOfEvens = 0;
var sum = 0;
for(var i=0;i<tab.length;i ){
if(tab[i]%2 == 0 ){
numberOfEvens ;
sum = tab[i];
}
}
if(numberOfEvens == 0)return null;
return sum/numberOfEvens;
}
console.log(getEvenAverage([0,1,2,3,4,5]))
console.log(getEvenAverage([1,2,3,4,5]))
console.log(getEvenAverage([0,1,11,3,4,5]))
console.log(getEvenAverage([1,5,3]))
Комментарии:
1. Вы получаете неверный результат для последнего примера массива. 0 — четное число, и среднее значение должно быть 0.
Ответ №6:
Вам нужны только четные числа, поэтому сначала filter
преобразуйте массив в новый массив, затем суммируйте все числа (с помощью reduce
или цикла for) и разделите на его длину.
function getEvenAverage(array) {
if (!Array.isArray(array)) return null; // not a must if you're sure you pass an array
var evenArray = array.filter(function(value) {
return value % 2 === 0
});
if (evenArray.length === 0) return null;
var evenSum = evenArray.reduce(function(total, current) {
return total current;
});
var evenAvg = evenSum / evenArray.length;
return evenAvg;
}
console.log(getEvenAverage("not an array"));
console.log(getEvenAverage([1,3,7])); // no even numbers
console.log(getEvenAverage([1,2,3])); // single even number
console.log(getEvenAverage([2,2,2])); // only even numbers
console.log(getEvenAverage([1,2,3,10,18])); // bigger array
console.log(getEvenAverage([0,1])); // 0 is also even
Ответ №7:
function getEvenAverage(arr){
var evenNumbers = []; // we use an array to hold all of our evenNumbers
for (var el of arr){ // we loop over the received array to check the received
if(el % 2 !=0){ // if the number is even
evenNumbers.push(el); // we add it to our evenNumbers array
}
}
if(evenNumbers.length == 0){ // when we have no even Number
return false; // we then return false
}
else{
// the next block of code calculates the average of the even values
return evenNumbers.reduce((pv,cv) => pv cv,0)/evenNumbers.length;
}
}
var evenNumbers = [4,2,3,6,5,9];
getEvenAverage(evenNumbers); // returns 5.666666666666667
getEvenAverage([2,4,6,8]); // returns false