Найдите сумму четных чисел из массива
Дан массив с числами. Нужно найти сумму четных чисел из этого массива. Для этого создать функцию arraySum, которая параметром принимает массив, а возвращает его сумму. Также создать функцию getEven, которая параметром принимает массив чисел, а возвращает массив четных чисел.
Сделал вот так:
var numbers = [1,2,3,4,5,6,7,8,9];
var newArr = [];
function getEven(num) {
if(num % 2 == 0) {
return newArr.push(num);
}
}
function arraySum(arr) {
return getEven(arr).reduce(function(a, b){
return a + b;
});
}
alert(arraySum(newArr));
Что тут неправильного? |
var numbers = [1,2,3,4,5,6,7,8,9];
function getEven(num) {
return num.filter(function(e) {
return !(e & 1);
});
}
function arraySum(arr) {
return getEven(arr).reduce(function(a, b){
return a + b;
});
}
alert(arraySum(numbers))
PS. Только разберитесь что же должно быть первичным - "функция getEven, которая параметром принимает массив чисел, а возвращает массив четных чисел" или "функция arraySum, которая параметром принимает массив, а возвращает его сумму" |
laimas,что означает выражение:
!(e & 1) |
Можно проверить кратность 2 числа делением его по модулю 2. Но куда проще будет узнать четное или нечетное число логической операцией. Все нечетные числа (имеется ввиду целые числа) в младшем разряде содержат 1 (HEX/BIN представления). Если проверять младший разряд логическим AND можно узнать нечетно ли число.
Функция .filter() возвращает тот обрабатываемый элемент массива, у которого булево значение результата операции обработки равно true. Для четного числа операция e & 1 (то есть значение текущего элемента массива AND 1) будет равно 0 (false), так как младший разряд четного числа равен 0. !(e & 1) инвертирует результат операции AND, таким образом для четных будет возвращено true, а значит элемент массива будет помещен в новый массив, а для нечетных false. https://developer.mozilla.org/ru/doc...wise_Operators В вашем случае можно было бы написать и универсальную функцию, которая может возвращать сумму всех элементов массива, либо только четных, либо только нечетных:
var a = [1,2,3,4,5,6,7,8,9];
function arraySum(arr, elm) {
arr = arr.slice(0);
for(var sum = 0, a; a = arr.pop();) sum += !elm || elm=="even" && !(a & 1) || elm== "odd" && a & 1 ? a : 0;
return sum
}
alert(arraySum(a)); //сумма всех
alert(arraySum(a, 'even')); //сумма четных
alert(arraySum(a, 'odd')); //сумма нечетных
|
| Часовой пояс GMT +3, время: 14:31. |