Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2017, 06:28
Кандидат Javascript-наук
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 106

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

Что тут неправильного?
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2017, 07:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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, 18.01.2017 в 07:10.
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2017, 09:10
Кандидат Javascript-наук
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 106

laimas,что означает выражение:
!(e & 1)
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с отбором чисел из массива mindkilla Общие вопросы Javascript 10 05.11.2012 12:03
как расчитать сумму массива вита Общие вопросы Javascript 1 19.05.2011 14:22
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03
Помогите решить задачку---Найти сумму элементов массива uniQ Общие вопросы Javascript 3 02.05.2009 01:20