Показать сообщение отдельно
  #4 (permalink)  
Старый 18.01.2017, 09:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Последний раз редактировалось laimas, 18.01.2017 в 10:48.
Ответить с цитированием