Найдите сумму четных чисел из массива
Дан массив с числами. Нужно найти сумму четных чисел из этого массива. Для этого создать функцию 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, время: 08:57. |