'even' 'odd' не могу понять что у меня не так

Реализуйте функцию getNumbersByParity, которая принимает массив чисел в качестве первого аргумента и строку "even" или "odd" в качестве второго. Функция должна вернуть новый массив, состоящий из четных чисел, если вторым аргументом было передано "even" и нечетных, если было передано "odd".

Оба аргумента функции обязательны. Первый обязательно будет массивом, а второй - строкой "even"/"odd".

const getNumbersByParity = (data, parity) => {
  let even = [];
  let odd = [];

  for (let i = 0; i < data.length; i++) {
    if (data[i] % 2 == 0) {
      even.push(data[i]);
    } else {
      odd.push(data[i]);
    }
  }
  if (even.length === 1) {
    return even;
  } else {
    return odd;
  }
};

const data = [1, 2, 3, 4, 5, 6];

console.log(getNumbersByParity(data, 'even')); // [2, 4, 6];
console.log(getNumbersByParity(data, 'odd')); // [1, 3, 5];`

Тесты


Ответы (1 шт):

Автор решения: Rostyslav Kuzmovych

Вариант покороче :

const getNumbersByParity = (data, parity) =>
  data.filter(e => parity === 'even' ? e % 2 === 0 : e % 2 !== 0)

// вариант еще короче, взято с коментов  
//const getNumbersByParity = (data, parity) =>
//  data.filter(e => e % 2 == (parity == 'odd'))    

const data = [1, 2, 3, 4, 5, 6]

console.log(getNumbersByParity(data, 'even'))
console.log(getNumbersByParity(data, 'odd'))
console.log(getNumbersByParity([], 'odd'))

Исправление вашей ошибки :

const getNumbersByParity = (data, parity) => {
  let even = [];
  let odd = [];

  for (let i = 0; i < data.length; i++) {
    if (data[i] % 2 == 0) {
      even.push(data[i]);
    } else {
      odd.push(data[i]);
    }
  }

  // было if (even.length === 1)
  // а нужно смотреть что передали в parity
  if (parity === 'even') {
    return even;
  } else {
    return odd;
  }
};

const data = [1, 2, 3, 4, 5, 6];

console.log(getNumbersByParity(data, 'even'));
console.log(getNumbersByParity(data, 'odd'));
console.log(getNumbersByParity([], 'odd'));

→ Ссылка