'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'));
