Можно проверить кратность 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')); //сумма нечетных